IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Contribuez / Téléchargez Sources et Outils PHP Discussion :

Parser un fichier CSV


Sujet :

Contribuez / Téléchargez Sources et Outils PHP

  1. #1
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut Parser un fichier CSV
    Bonjour,

    Je vous propose un nouvel élément à utiliser : Parser un fichier CSV

    Cette fonction permet aussi de choisir le séparateur et ajoute une possibilité de condiérer la première ligne comme en-tête...

    Qu'en pensez-vous ?
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag (en bas)

  2. #2
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    j'aurai mis un petit : FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES, pour le file,
    mais il faut utiliser les outils adaptés à savoir fgetcsv, tu pouvais aussi utiliser array_combine pour mixer les headers

    ca me semble plus judicieux de faire quelque chose comme ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    function parse_csv($file, $head = false, $sep = ';')
    {
        $handle = fopen($file, 'r');
     
        if(false === $handle)
        {
            return false;
        }
     
        if(true === $head)
        {
            $header = fgetcsv($handle, 0, $sep);
     
            if(false === $header)
            {
                return false;
            }
        }
     
        while($row = fgetcsv($handle, 0, $sep))
        {
            if(false === $row)
            {
                return false;
            }
     
            if(true === $head)
            {
                $data[] = $row + array_combine($header, $row);
            }
            else
            {
                $data[] = $row;
            }
        }    
     
        if(false === empty($data))
        {
        	return $data;
        }
     
        return false;
    }
    voir pourquoi pas ajouter des options de "fetch" array, row, object,
    mais SplFileObject etant la façon la plus simple et rapide de manipuler un CSV

  3. #3
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    Tout à fait d'accord.

    De plus en utilisant SplFileObject qui est un Iterator, on peut mettre des filtres ou des limit iterator par dessus.
    De plus SplFileObject possède déjà les méthodes nécessaires pour traiter du CSV: http://www.php.net/~helly/php/ext/sp...4b6b530dd04ac7

  4. #4
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    Citation Envoyé par Benjamin Delespierre Voir le message
    Tout à fait d'accord.

    De plus en utilisant SplFileObject qui est un Iterator, on peut mettre des filtres ou des limit iterator par dessus.
    De plus SplFileObject possède déjà les méthodes nécessaires pour traiter du CSV: http://www.php.net/~helly/php/ext/sp...4b6b530dd04ac7
    mais pas encore le fputcsv
    mais ca va venir (#53264)

  5. #5
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    J'avais pas remarqué, bien vu stealth.
    Remarque, le besoin classique est plus de recevoir du CSV que d'en émettre (ce n'est en soi pas bien compliqué).

  6. #6
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    Citation Envoyé par Benjamin Delespierre Voir le message
    J'avais pas remarqué, bien vu stealth.
    Remarque, le besoin classique est plus de recevoir du CSV que d'en émettre (ce n'est en soi pas bien compliqué).
    ça fait un moment que j'ai fais la demande, mais je sais pas quand est-ce que ça va vraiment sortir en release (comme beaucoup de mes demandes...)

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 6
    Points : 7
    Points
    7
    Par défaut
    Pourquoi un file() alors qu'un fgetcsv() existe?

  8. #8
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    Citation Envoyé par sebounet Voir le message
    Pourquoi un file() alors qu'un fgetcsv() existe?
    je pense comme toi qu'il est grand temps de modifier cette astuce

  9. #9
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    Pourquoi pas dériver la classe SplFileObject en CSVFileObject, ce qui en ferait un itérateur bien pratique

    (je ferais une implem plus tard, overbooké là tout de suite...)

Discussions similaires

  1. [1.x] Parser un fichier csv
    Par J-P_Dev dans le forum Symfony
    Réponses: 2
    Dernier message: 09/10/2013, 12h18
  2. Parser un fichier csv
    Par hjulius dans le forum Documents
    Réponses: 1
    Dernier message: 05/05/2010, 17h10
  3. [script batch] parser un fichier csv
    Par mustang-ffw02 dans le forum Windows
    Réponses: 8
    Dernier message: 09/10/2007, 13h58
  4. [bash] utilisation de CAT/AWK pour parser un fichier CSV
    Par arnaudperfect dans le forum Shell et commandes GNU
    Réponses: 32
    Dernier message: 25/07/2007, 23h34
  5. Parser un fichier csv
    Par alison239 dans le forum C
    Réponses: 3
    Dernier message: 10/05/2006, 08h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo