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

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...
Avatar de 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
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
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
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
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
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
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
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.