Page 1 sur 1

[Débutant PHP] Récupérer un morceau de string lu sur stdin

Posté : 16 sept. 2016, 11:58
par fitnopk
Bonjour,

Je viens tout juste de finir ma 1ere année d'étude en informatique et j'effectue actuellement un stage pour le début de ma 2nde année. N'ayant codé qu'en C je dois évidemment voir plein de langages autre pour me rendre utile, et je dois coder un script PHP pour convertir des fichiers source en .csv.

Actuellement, je bloque sur un problème qui m'a l'air bête comme tout si j'étais en C mais que je n'arrive pas à résoudre en PHP: je demande à l'utilisateur d'entrer le chemin de ses fichiers à convertir séparés par des ';' afin de les traiter un à un en vérifiant leur validité. Du coup je veux récupérer chaque chemin entre ';' pour l'utiliser, j'ai essayé une méthode à la C mais qui ne fonctionne pas.

Code : Tout sélectionner

function getNextFile($files) { static $i = 0; $actual_file = ""; while ($files[$i] !== ';' && $files[$i] !== NULL) $actual_file .= $files[$i++]; if ($files[$i] === ';') { $i++; return $actual_file; } else return NULL; }
Et du coup je reçois un

Code : Tout sélectionner

Notice: Uninitialized string offset: X in <path> on line 264 PHP Notice: Uninitialized string offset: X in <path> on line 265
J'ai un peu du mal avec l'utilisation des variables puisqu'en C je leur donne toute un type alors qu'ici on les défini juste...
Enfin voilà, si quelqu'un peut m'éclaircir :roll:

Re: [Débutant PHP] Récupérer un morceau de string lu sur stdin

Posté : 16 sept. 2016, 12:21
par Ryle
Bonjour,

Le plus simple pour toi à mon avis est d'utiliser la fonction explode() de php qui te permet de transformer une chaine en tableau en spécifiant le caractère séparateur des enregistrements. Tu peux ainsi facilement convertir ta chaine en un tableau de chemins.

Tu pourras ainsi facilement parcourir ce tableau avec un while, un for ou un foreach pour vérifier ou utiliser les chemins qu'il contient :)

Re: [Débutant PHP] Récupérer un morceau de string lu sur stdin

Posté : 16 sept. 2016, 14:15
par fitnopk
J'avais lu beaucoup sur implode en cherchant une solution mais je ne savais pas que son contraire explode existait :o
Merci, du coup ça amrche beaucoup mieux!

Code : Tout sélectionner

print "Spécifiez le chemin des fichiers source que vous souhaitez convertir en .csv, séparés par des ';' :\n"; $files = explode(" ", trim(fgets(STDIN))); for ($i = 0;$files[$i] != NULL;$i++) { if (fopen($files[$i], 'r')) { print $actual_file . ": succès!\n"; } else print "Le fichier indiqué à '" . $files[$i] . "' n'a pas pu être trouvé.\n"; }
Est-ce que par hasard il existerait une fonction similaire au dup2 du C pour rediriger stderr sur un fichier?

Re: [Débutant PHP] Récupérer un morceau de string lu sur stdin

Posté : 19 sept. 2016, 13:28
par moogli
salut,

tu dois pouvoir faire quelque chose avec file_put_contents, par contre en continue je suis pas certain.


au passage, tu n'oublies pas les fclose hein :)

@+

Re: [Débutant PHP] Récupérer un morceau de string lu sur stdin

Posté : 20 sept. 2016, 17:28
par fitnopk
au passage, tu n'oublies pas les fclose hein :)
Je l'ai remarqué après :wink: