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

fitnopk
Invité n'ayant pas de compte PHPfrance

16 sept. 2016, 11:58

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:

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

16 sept. 2016, 12:21

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 :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

fitnopk
Invité n'ayant pas de compte PHPfrance

16 sept. 2016, 14:15

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?

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

19 sept. 2016, 13:28

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 :)

@+
Il en faut peu pour être heureux ......

Eléphanteau du PHP | 40 Messages

20 sept. 2016, 17:28

au passage, tu n'oublies pas les fclose hein :)
Je l'ai remarqué après :wink: