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

Langage PHP Discussion :

Lire et écrire facilement des fichiers CSV


Sujet :

Langage PHP

  1. #1
    Membre actif
    Homme Profil pro
    électronicien
    Inscrit en
    Octobre 2006
    Messages
    225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : électronicien
    Secteur : Bâtiment

    Informations forums :
    Inscription : Octobre 2006
    Messages : 225
    Points : 236
    Points
    236
    Par défaut Lire et écrire facilement des fichiers CSV
    Bonjour. J'expérimente
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $csv = new SplFileObject(EXPORT_CSV, 'w');  
     $csv->fputcsv($T_row, ';');
    -------------------------------------------------------------------------------------
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        while($T_= mysql_fetch_array($DBexport)){
             $T_row .= ';'. $T_;
    ------------------------------------------------------------------------------------------

    Mais la sortie me donne bien le fichier mais à 0octet.
    Par où peut on afficher les message d'erreurs. Merci.

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Comment s'articulent les deux bouts de code que tu nous montres ?

  3. #3
    Membre actif
    Homme Profil pro
    électronicien
    Inscrit en
    Octobre 2006
    Messages
    225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : électronicien
    Secteur : Bâtiment

    Informations forums :
    Inscription : Octobre 2006
    Messages : 225
    Points : 236
    Points
    236
    Par défaut
    Pour plus de clarté, le voici en entier.
    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
     
        $sql= read_var('sql') ;
     
        $DBexport= mysql_query($sql);
        if(!$DBexport){ jsalert("Erreur mysql: Revoir la variable sql !");
                 debug("export:  mysql_query(sql) a échoué ABORT");
                return false; 
        }
     
        $T_row  = mysql_field_array($DBexport);
        while($T_= mysql_fetch_array($DBexport)){
             $T_row .= ';'. $T_; 
         //    print 'row: '.implode(' ',$T_)."<br>";
        }
     
         $csv = new SplFileObject(EXPORT_CSV, 'w');  // voir http://www.mon-code.net/article/49/lire-et-ecrire-facilement-des-fichiers-csv-avec-la-spl-de-php5
        $csv->setCsvControl(';', '"', '"');
        $csv->fputcsv($T_row, ';');   
     
     
        jsalert("Exportation ".EXPORT_CSV." terminée.");
     
        debug("export ".EXPORT_CSV."  FIN");
    La fonction debug est une invention à moi. Je peux ainsi tracer le suivi du programme dans un fichier à part.

  4. #4
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $T_row  = mysql_field_array($DBexport);
    while($T_= mysql_fetch_array($DBexport)){
    Tu es sûr de la 1ere fonction ?

    La fonction SplFileObject:: fputcsv prend un tableau en paramètre mais $T_row est une chaine. Donc m'est avis que ça va pas bien marcher

  5. #5
    Membre actif
    Homme Profil pro
    électronicien
    Inscrit en
    Octobre 2006
    Messages
    225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : électronicien
    Secteur : Bâtiment

    Informations forums :
    Inscription : Octobre 2006
    Messages : 225
    Points : 236
    Points
    236
    Par défaut
    oups: mysql_field_array n'existe pas.
    mysql_field_name qui existe est qui génère une string.
    Merci beaucoup pour le dépannage... C'est terrible de débuter.

  6. #6
    Membre actif
    Homme Profil pro
    électronicien
    Inscrit en
    Octobre 2006
    Messages
    225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : électronicien
    Secteur : Bâtiment

    Informations forums :
    Inscription : Octobre 2006
    Messages : 225
    Points : 236
    Points
    236
    Par défaut
    J'ai progressé... mais j'ai tout sur une ligne. Il me faudrait faire maintenant une matrice dynamiquement mais quand j'essaie j'ai des array;array;array;array; en sortie de $T_result

    Code php : 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
        // insertion des titres de colonnes
        while($field = mysql_field_name($DBexport,$i++)){
            $T_row[]  = $field;
        }
        $T_result[][]=$T_row;
     
     
        // insertion du contenu des colonnes
        while($row= mysql_fetch_row($DBexport)){
            foreach($row as $ligne) {
                $T_row[]  = $ligne;            
            }
        $T_result[][]=$T_row;
        }
     
        mysql_free_result($DBexport);
     
     
        $csv = new SplFileObject(EXPORT_CSV, 'w');  // voir http://www.mon-code.net/article/49/lire-et-ecrire-facilement-des-fichiers-csv-avec-la-spl-de-php5
        $csv->setCsvControl(';', '"', '"');
        $csv->fputcsv($T_row, ';');

  7. #7
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Je ne vois pas trop ce que ton histoire de matrice vient faire dans l'histoire (ni ce que tu veux dire par "matrice" en fait)
    Mais bon, le but c'est d'avoir le résultat de la requête dans un fichier CSV, avec les noms des colonnes en entête. c'est bien ça ?

  8. #8
    Membre actif
    Homme Profil pro
    électronicien
    Inscrit en
    Octobre 2006
    Messages
    225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : électronicien
    Secteur : Bâtiment

    Informations forums :
    Inscription : Octobre 2006
    Messages : 225
    Points : 236
    Points
    236
    Par défaut
    Oui c'est ça. Je voudrais retrouver mon tableau normalement et non pas tout sur une seule ligne de 3 km.
    D'après la doc, j'ai vu qu'il faut faire un array de array.
    http://php.net/manual/fr/splfileobject.fputcsv.php

  9. #9
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    C'est bien ça. Donc tu fais un tableau pour chaque ligne, et tu stockes ce tableau dans un tableau.
    Et ensuite tu boucles sur ton tableau de tableau et tu ajoutes autant de lignes que d'éléments.
    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
    while($field = mysql_field_name($DBexport,$i++)){
        $T_row[]  = $field;
    }
    $T_result[]=$T_row;
     
     
    // insertion du contenu des colonnes
    while($row= mysql_fetch_row($DBexport)){
        foreach($row as $ligne) {
            $T_row[]  = $ligne;            
        }
        $T_result[]=$T_row;
    }
     
    foreach ($T_result as $T_row) {
        $csv->fputcsv($T_row, ';');
    }

  10. #10
    Membre actif
    Homme Profil pro
    électronicien
    Inscrit en
    Octobre 2006
    Messages
    225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : électronicien
    Secteur : Bâtiment

    Informations forums :
    Inscription : Octobre 2006
    Messages : 225
    Points : 236
    Points
    236
    Par défaut
    Merci Ça marche parfaitement. Il faut juste penser à vider la variable $T_row au passage.
    J'ai appris à remplir un tableau de tableau aujourd'hui. Pas facile de s'y retrouver sur google.

  11. #11
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Tu n'étais pas trop mal parti, mais tu faisais un tableau de tableaux de tableaux $T_result[][]=$T_row; ($t_row étant un tableau et chaque [] correspondant à un niveau du tableau)

    Au passage ,tu peux remettre le

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Lire des fichiers csv directement dans Excel
    Par thierryppp dans le forum VBScript
    Réponses: 6
    Dernier message: 17/09/2011, 14h05
  2. lire et écrire dans des fichiers différents
    Par jane40 dans le forum MATLAB
    Réponses: 13
    Dernier message: 13/01/2009, 21h30
  3. [FTP] Lire et écrire dans un fichier
    Par dj-julio dans le forum Langage
    Réponses: 49
    Dernier message: 12/01/2006, 11h59
  4. [Rech. Comp.] Lire et écrire dans des fichiers XML
    Par Rodrigue dans le forum C++Builder
    Réponses: 4
    Dernier message: 26/08/2005, 20h48

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