Parser un fichier CSV

Présentation
Cette fonction permet aussi de choisir le séparateur et ajoute une possibilité de condiérer la première ligne comme en-tête...
Téléchargement
0  0 
Téléchargé 28 fois Voir les 8 commentaires
Détails
Catégories : Divers
Avatar de Swoög
Expert éminent
Voir tous les téléchargements de l'auteur
Licence : Autre
Date de mise en ligne : 14 février 2011




Avatar de stealth35 stealth35 - Expert éminent sénior https://www.developpez.com
le 15/02/2011 à 9:53
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
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
Avatar de Benjamin Delespierre Benjamin Delespierre - Expert éminent https://www.developpez.com
le 15/02/2011 à 12:05
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
Avatar de stealth35 stealth35 - Expert éminent sénior https://www.developpez.com
le 15/02/2011 à 12:41
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)
Avatar de Benjamin Delespierre Benjamin Delespierre - Expert éminent https://www.developpez.com
le 15/02/2011 à 13:37
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é).
Avatar de stealth35 stealth35 - Expert éminent sénior https://www.developpez.com
le 15/02/2011 à 16:30
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...)
Avatar de sebounet sebounet - Futur Membre du Club https://www.developpez.com
le 10/09/2011 à 9:30
Pourquoi un file() alors qu'un fgetcsv() existe?
Avatar de stealth35 stealth35 - Expert éminent sénior https://www.developpez.com
le 10/09/2011 à 13:40
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
Avatar de Benjamin Delespierre Benjamin Delespierre - Expert éminent https://www.developpez.com
le 12/09/2011 à 12:18
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...)
Developpez.com décline toute responsabilité quant à l'utilisation des différents éléments téléchargés.
Contacter le responsable de la rubrique PHP