Blogdevphp

SplFileObject, kesaco ?

2013-08-21 php

Il m'a été demandé lors d'un projet, de permettre la lecture d'un fichier CSV afin de le formater avec des colonnes prédéfinies. Quand on pense lecture de fichier, on pense tout de suite aux fonctions fopen pour ouvrir le fichier ou encore fread pour la lecture en mode binaire. Cependant, pour s'inscrire dans un cadre orienté objet, on doit s'interesser à la SPL, la Standard PHP Library. Elle comporte un ensemble de classes, d'interfaces prêtes à être utilisées selon nos besoins. Celle concernant les flux de données, s'intitule SplfileObject qui va nous permettre de manipuler les fichiers d'une manière "objet".

Ouverture et lecture fichier

<?php
    $csv = new SplFileObject('nom_fichier_csv', 'r');
    $csv->setFlags(SplFileObject::READ_CSV);
    $csv->setCsvControl(';', '"', '"');
?>

On crée l'objet $csv dont les paramètres sont le nom du fichier et le mode utilisé pour ouvrir le fichier. Dans un second temps, on définit le ou les drapeaux pour notre objet. Ici, nous avons utilisé la constante SpFileObject::READ_CSV qui va analyser les lignes du fichier en tant que lignes CSV. Il y a d'autres constantes qui existent pour analyser le fichier selon nos besoins. Enfin, on précise le délimiteur, dans le ca présent, c'est le point-virgule et les double quote qui délimitent les champs des colonnes.

Ignorer la première ligne

Dans un fichier CSV, on peut avoir des noms de colonnes. Seulement, il faut trouver un moyen de ne point prendre en compte la première ligne. Cela peut occasionner des erreurs et empêcher l'analyse du fichier. Sachez que dans la SPL, il y une méthode qui permet d'effectuer cette action très facilement ! Cela nous évitera l'utilisation de la fonction unset() ou encore d'une condition pour éviter la lecture de la première ligne. 

<?php
    $loadCsv = new LimitIterator($csv, 1);
?>

Oui, c'est aussi simple que cela ! La méthode prend en paramètre mon fichier et la ligne à ne pas analyser.

Affichage des données

Après tout ça, pourquoi pas afficher les données en utilisant certaines des méthodes de SpFileObject !!

<?php
    while (!$loadCsv->eof()) 
    {
        echo $loadCsv->current();
        $loadCsv->next();
    }
?>

Tant qu'on n'a pas atteint la fin du fichier, on analyse entièrement le fichier.

Conclusion

La classe SpFileObject est dotée de plusieurs méthodes qui permettent la lecture de flux de données selon vos besoins. Je vous invite à vous interesser à la SPL qui permet de simplifier et de permettre une meilleure lisibilité pour vos scripts futurs. Avec ce simple code, nous pouvons lire le fichier CSV en s'inscrivant dans un cadre "objet".

comments powered by Disqus
Copyright © 2019 blogdevphp.fr - Tous droits réservés