Lire un fichier CSV (Excel) avec PHP

Catégorie : PHP | Tag : , ,
Share

Je viens de découvrir 2 petites fonctions PHP bien utiles pour s’occuper d’un fichier Excel. (ou équivalent) Si vous avez déjà essayé de traiter un fichier Excel avec PHP, vous savez sûrement qu’il faut préalablement enregistrer ce fichier au format CSV (Comma-Separated Values), vos colonnes sont alors séparées par des points virgules ( ; ) et vos lignes par un retour à la ligne. Donc un fichier CSV ressemble à ceci : > case1;case2; »case 3 avec des espaces »;case4%%% > case5;case6; »case 7 avec des espaces »;case8%%% A partir de la, au premier abord, on s’apprête à utiliser des regex ([preg_match_all|http://30minparjour.la-bnbox.fr/post/2009/Une-fonction-regex-bien-utile-preg_match_all] par exemple) pour lire le fichier, mais ce serait perdre un peu de temps pour pas grand chose. En effet, il existe 2 fonctions pour lire et écrire un fichier CSV en PHP : @@fgetcsv@@ et @@fputcsv@@. * @@fgetcsv@@ : lit un fichier CSV et renvoie le résultat de la ligne courante dans un tableau puis déplace le pointeur à la ligne suivante. Donc une petite boucle @@while($data = fgetcsv(…))@@ et on récupère toutes les lignes du fichier. Quants aux arguments à fournir : un pointeur vers un fichier ouvert (avec @@fopen@@ par exemple), et si on veut : taille maximum de la ligne (1000 par exemple), le séparateur (la virgule par défaut), le caractère de délimitation (double quote par défaut), le caractère d’échappement (l’antislash par défaut) * @@fputcsv@@ : écrit une ligne dans un fichier à partir d’un array, et déplace le pointeur à la ligne suivante. Quants aux arguments à fournir : un pointeur vers un fichier ouvert (avec @@fopen@@ par exemple), un tableau avec le contenu à insérer, et si on veut : le séparateur (la virgule par défaut), le caractère de délimitation (double quote par défaut), le caractère d’échappement (l’antislash par défaut) Un petit exemple pour bien comprendre : /// $fd1 = fopen(‘tmp.csv’, ‘w’); $fd2 = fopen(‘res.csv’, ‘w’); while (($data = fgetcsv($fd1, 1000, ‘;’)) !== FALSE) { $data[0] $data[0]+3; fputcsv($fd2, $data, ‘;’); } fclose($fd1); fclose($fd2); /// Ici je lis un fichier @@tmp.csv@@, je modifie sa première colonne en lui ajoutant 3 et j’écris la ligne modifiée dans un nouveau fichier @@res.csv@@.%%% Si vous lisez plusieurs fois le même fichier à la suite, au lieu de le fermer puis de la réouvrir à chaque fois, vous pouvez utiliser @@rewind($fd)@@ pour repositionner le pointeur au début du fichier.%%% Autre chose qui peut être pratique. @@str_getcsv@@ fait exactement la même chose que @@fgetcsv@@, sauf qu’il ne prend pas en argument un fichier mais une chaine de caractères ! Donc si vous avez besoin de créer un array rapidement…

Une réponse à Lire un fichier CSV (Excel) avec PHP

  1. Ben

    Ton article a l’air intéressant mais il est malheureusement illisible. Dommage

Leave a Reply

Your email address will not be published. Required fields are marked *

*

You may use these HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>