M2202 - Algorithmique et PHP
Transcription
M2202 - Algorithmique et PHP
M2202 - Algorithmique et PHP David Annebicque 2016 1 TD : Manipulation de fichiers 1.1 Introduction Ce TD/TP s’intéresse à la manipulation de fichier. Nous nous focaliserons sur la manipulation de fichiers texte (txt) standard et des fichiers csv qui pourront par exemple être exploité dans un tableur de type excel. Pour pouvoir manipuler les fichiers, vous devez vous assurer de mettre les droits en écriture et execution sur votre répertoire. 1.2 Fichier texte La manipulation d’un fichier comporte trois étapes : 1. Ouvrir le fichier (s’il existe) 2. Exploiter le fichier (lecture et/ou écriture) 3. Fermer le fichier Ce qui se traduit pour les étapes 1 et 2 par le code ci-dessous: 1 2 3 <?php // 1 : on ouvre le fichier $monfichier = fopen('fichier.txt', 'r+'); 4 5 // 2 : on fera ici nos opérations sur le fichier... 6 7 8 9 // 3 : quand on a fini de l'utiliser, on ferme le fichier fclose($monfichier); ?> 1 Table 1 – My caption Mode Explications Ouvre le fichier en lecture seule. Cela signifie que vous pourrez, r seulement lire le fichier. Ouvre le fichier en lecture et écriture. Vous pourrez non,seulement lire r+ le fichier, mais aussi y écrire (on l’utilisera, assez souvent en pratique). Ouvre le fichier en écriture seule. Mais il y a un avantage : si le fichier a n’existe pas, il est automatiquement créé. Ouvre le fichier en lecture et écriture. Si le fichiers n’existe pas, il est créé automatiquement. Attention : le répertoire doit avoir un CHMOD a+ à 777 dans ce cas ! À noter que si le fichier existe déjà, le texte sera rajouté à la fin. Si votre fichier.txt se trouve dans un répertoire, vous devez modifier la ligne 3 avec le bon chemin. Vous n’êtes absolument pas obligés de donner l’extension .txt à votre fichier. Vous pouvez l’appeler comme vous voulez : exemple.cpt, exemple.num, ou même exemple tout court. En pratique vous pouvez écrire n’importe quelle extension, mais pour pouvoir l’ouvrir par la suite il faut soit que l’extension n’existe pas (dans ce cas on ouvrir le fichier avec un éditeur de texte), où alors que l’extension soit en fait un fichier txt (par exemple le html, un fichier ini ou encore du csv...). Le second argument de la fonction fopen indique de quelle manière il faut ouvrir le fichier. Le tableau ci-dessous vous présente les différents mode dans lequel un fichier peut être ouvert. Pour lire un fichier, il existe deux méthodes : soit ligne par ligne (fgets), soit caractère par caractère (fgetc). 1.2.1 1 2 Lire <?php $ligne = fgets($monfichier); L’instruction ci-dessus permet donc de lire la première ligne de votre fichier (et uniquement celle-là). Pour parcourir tout le fichier, il faut faire une boucle qui va parcourir l’ensemble des lignes. 1 2 3 <?php // 1 : on ouvre le fichier $monfichier = fopen('fichier.txt', 'r+'); 2 4 5 6 7 8 9 10 11 12 13 // 2 : on fera ici nos opérations sur le fichier... while(!feof($monfichier)) { $ligne = fgets($monfichier); //on fait quelque chose avec ligne } // 3 : quand on a fini de l'utiliser, on ferme le fichier fclose($monfichier); ?> Dans le code ci-dessus, la boucle while regarde si on est à la fin du fichier (feof permet de détecter la fin du fichier). La ligne fgets, va automatiquement lire les ligne de manière successive à chaque itération de la boucle. Un peu comme le fetch dans la base de données du TD3. 1.2.2 Écrire Pour écrire il n’existe qu’une méthode : fputs. 1 2 <?php fputs($monfichier,"le texte à écrire"); L’ajout se fait là ou se trouve le curseur : en fin de ligne si on à lu une ligne, après une caractère, si on a fait un fgetc. Pour repositionner le curseur, on peut utiliser : 1 2 <?php fseek($monfichier,0); Qui va replacer le curseur au caractère 0, c’est à dire au début du fichier. 1.3 1.3.1 fichier CSV Lire La manipulation d’un fichier csv est très similaire à u fichier texte, en effet, techniquement un fichier csv est un fichier texte. Cependant, le format CSV étant pratique à manipuler (notamment car il peut être utilisé dans une base de données, dans un tableur, ...), php propose de nombreuses fonctionnalités pour le manipuler. 3 1 2 <?php $ligne = 1; // compteur de ligne 3 4 5 6 7 $fichier = fopen("fichier.csv", "a+"); while($ligne=fgetcsv($fichier,1024,';')) { $champs = count($ligne);//nombre de champ dans la ,→ ligne en question 8 //affichage de chaque champ de la ligne en ,→ question for($i=0; $i<$champs; $i ++) { echo $ligne[$i] . "<br />"; } 9 10 11 12 13 14 } 15 16 17 fclose($fichier); ?> Le code ci-dessous montre comment lire un fichier csv avec la méthode fgetcsv. Cette méthode prend 3 arguments : — la variable de fichier — la taille d’une ligne (souvent 1024) — le caractère de séparation (traditionnellement ; ou ,). Lors de la lecture d’une ligne, la fonction fgetcsv renvoi un tableau, avec dans chaque case les ”parties” entre les séparateurs. C’est comme cela que fonctionne votre import dans une base de données. 1.3.2 1 2 Écrire <?php $ligne = 1; // compteur de ligne 3 4 $fichier = fopen("fichier.csv", "a+"); 5 6 7 $tableau = array('a','b'); fputcsv($fichier, $tableau, ";"); 8 9 10 fclose($fichier); ?> 4 L’écrire se fait par l’intermédiaire de la fonction fputcsv, qui prend 3 paramètres : — le fichier — un tableau de données — le séparateur. Cette fonction va transformer le tableau en une ligne de texte, où les éléments seront séparés par le séparateur. 1.4 1.4.1 Exercices Lire un fichier texte 1. Récupérer le fichier exemple.txt sur davidannebicque.fr 2. le mettre dans votre répertoire, vérifier les droits. 3. Écrire un fichier qui va récupérer et afficher le contenu de ce fichier. 1.4.2 Écrire un fichier texte 1. Écrire un fichier php qui permet de générer un fichier txt contenant le texte de votre choix 1.4.3 Lire un fichier csv 1. Récupérer le fichier comics.csv sur davidannebicque.fr 2. le mettre dans votre répertoire, vérifier les droits. 3. Ecrire un fichier qui va récupérer et afficher le contenu de ce fichier. 1.4.4 Écrire un fichier csv 1. Écrire un fichier csv, séparateur ”;” qui va contenir les données de la table comics 2. Tester le fichier généré dans un tableur. 5