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 :

Fichiers CSV et PHP


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Femme Profil pro
    Formateur en informatique
    Inscrit en
    Avril 2011
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : Avril 2011
    Messages : 78
    Points : 43
    Points
    43
    Par défaut Fichiers CSV et PHP
    Bonjour,


    J'ai besoin de remplir un tableau à partir des fichiers csv,

    Je travaille sous php, je veux faire des recherches et des traitements comme la comparaison des champs dans deux fichiers csv puis l'enregistrer dans un tableau.

    Comment je peux commencer? pouvez vous me donner des tutos?

    Merci d'avance.

  2. #2
    Membre éclairé Avatar de ypcman
    Homme Profil pro
    Retraité codeur !
    Inscrit en
    Janvier 2011
    Messages
    595
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Retraité codeur !
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2011
    Messages : 595
    Points : 879
    Points
    879
    Par défaut
    Bonjour.
    Tu peux récupérer les données de tes fichiers csv avec un script du genre
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <?php
    $fichier = fopen("mon_fichier.csv","r"); // nom du fichier à indiquer
    $texte_fichier="";
    while(!feof($fichier))$texte_fichier.=fgets($fichier,255);
    fclose($fichier);
    $tableau_1=explode(";",$texte_fichier); // séparateur à indiquer
    $nb_champ=6; // nombre de champs par ligne à indiquer
    $tab_data=array();
    foreach($tableau_1 as $data)
    	{
    	$tab_data[floor($i/$nb_champ)][$i%$nb_champ]=trim(addSlashes($data));
    	}
    ?>
    Ensuite, soit tu bascules les valeurs du tableau $tab_data dans une table puis tu fais des requêtes, soit tu gardes le tout dans des tableaux et tu utilises les fonctions php de comparaison de tableaux.

    Yves
    Participez vous aussi !
    Message utile
    Discussion résolue

  3. #3
    Membre du Club
    Femme Profil pro
    Formateur en informatique
    Inscrit en
    Avril 2011
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : Avril 2011
    Messages : 78
    Points : 43
    Points
    43
    Par défaut
    Merci bien pour votre réponse.

    Est ce que je peux convertir mes 2 fichiers csv en une base de données MySql et de travailler sous les fonctions de Mysql, c'est possible!

    J'ai trouvé csv sous php est un peu compliqué. J'ai besoin de Vos Conseils SVP!

  4. #4
    Membre éclairé Avatar de ypcman
    Homme Profil pro
    Retraité codeur !
    Inscrit en
    Janvier 2011
    Messages
    595
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Retraité codeur !
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2011
    Messages : 595
    Points : 879
    Points
    879
    Par défaut
    Pour insérer des fichiers texte dans une bdd MySQL, tu peux utiliser mysqlimport. http://dev.mysql.com/doc/refman/5.0/fr/mysqlimport.html Il y a plein de tutoriels sur le sujet.
    Yves
    Participez vous aussi !
    Message utile
    Discussion résolue

  5. #5
    Membre du Club
    Femme Profil pro
    Formateur en informatique
    Inscrit en
    Avril 2011
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : Avril 2011
    Messages : 78
    Points : 43
    Points
    43
    Par défaut
    Bonjour,


    Concernant Votre code PHP

    est ce que $tab_data stocke les données du fichiers .csv?

    Comment je peut faire pour avoir $tab_data[i][j] .

    Voici les modifications que j'ai fait , mais ça marche pas.


    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
    $fichier2 = fopen("fichierT.csv","r"); // nom du fichier à indiquer
    $texte_fichier2="";
    while(!feof($fichier2))$texte_fichier2.=fgets($fichier2,255);
    fclose($fichier2);
    $tableau_2=explode(";",$texte_fichier2); // séparateur à indiquer
    //$nb_champ=7; // nombre de champs par ligne à indiquer
    $tab_data2=array();
    //$i="";
    $heigh=sizeof($tableau_2); 
    $width=sizeof($tableau_2[0]); 
     
    foreach($tableau_2 as $data)
    	{
    	for($i=0;$i<$heigh;$i++) {
    	for($j=0;$j<$width;$j++) {
     
    	$tab_data2[$i][$j]=trim(addSlashes($data));
    	echo $tab_data2;
     
    	}
    	}
    	}
     
     
     
    ?>

  6. #6
    Membre éprouvé Avatar de patrickbaras
    Homme Profil pro
    Informaticien (à sa mémère).
    Inscrit en
    Septembre 2010
    Messages
    525
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Informaticien (à sa mémère).
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 525
    Points : 1 103
    Points
    1 103
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <?php
    $tab_data=array();
    $row = 0;
    if (($handle = fopen("fichierT.csv", "r")) !== FALSE) {
        while (($data = fgetcsv($handle, 1000, ";")) !== FALSE) {
    		$tab_data[$row] =$data;
            $row++;
        }
        fclose($handle);
    }
    echo "<xmp>";
    print_r($tab_data);//resultats $tab_data[ligne][colonne] (numérotées a partir de  $tab_data[0][0]
    echo "</xmp>";
    ?>
    ce message vous a aidé ! Un petit click sur fait toujours plaisir

    "Nos études ont montré que la probabilité qu’un programme corrigé fonctionne comme avant la correction est seulement de cinquante pour cent." Bev Littlewood & Lorenzo Strigini

    "Le logiciel, c’est comme le sexe, c’est meilleur quand c’est libre/gratuit." Linus Torvalds

  7. #7
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 380
    Points : 10 410
    Points
    10 410
    Par défaut
    Citation Envoyé par infooo Voir le message
    Merci bien pour votre réponse.

    Est ce que je peux convertir mes 2 fichiers csv en une base de données MySql et de travailler sous les fonctions de Mysql, c'est possible!

    J'ai trouvé csv sous php est un peu compliqué. J'ai besoin de Vos Conseils SVP!
    Oui tu peux par exemple charger ton csv dans une table mysqlite en mémoire ce qui te permettra d'utiliser les fonctions mysql pour faire des recherches.
    Dans l'exemple ci-dessous modifies les deux premières lignes de configuration dans un premier temps pour faire des tests. Le code est documenté.
    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
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    <?php
    $fichier = 'test.csv';// Fichier cible csv
    $separateur = ';';// Point virgule si csv français
     
    $table_temp = 'test_csv'; // Nom que l'on veut donner à la table temporaire (peu importe)
     
     
    // Ouverture de sqlite en mémoire
    try
    {
        $dbh = new PDO("sqlite::memory:");
        $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
    }
    catch(PDOException $e)
    {
        exit($e->getMessage());
    }    
     
     
    // Chargement du fichier csv 
    $file = new SplFileObject($fichier);
    $file->setFlags(SplFileObject::READ_CSV | SplFileObject::SKIP_EMPTY);
    $file->setCsvControl($separateur);
     
     
    /* Récupération de la première ligne du tableau pour créer la table, les colonnes, et la requête préparée d'insertion. 
    (suppose que la première ligne du csv indique les noms des colonnes sinon il faudra les indiquer à la place de $champs_sqlite dans CREATE TABLE $table_temp ($champs_sqlite)   */
     
    $tab_champs = $file->current();
     
    $champs_sqlite = implode(',',$tab_champs);
     
    $champs_insert = array_fill(0,count($tab_champs),'?');
     
    $champs_insert = implode(',',$champs_insert);
     
    // Création de la table
    $dbh->exec("CREATE TABLE $table_temp ($champs_sqlite)");
     
    // Préparation de la requête
    $stmt = $dbh->prepare("INSERT INTO $table_temp VALUES ($champs_insert)");    
     
    // On passe la première ligne du csv (si elle correspond à la description des colonnes)
    $file->next();
     
    // Insertion des données csv dans la table
    while($row = $file->current())
    {		
        $stmt->execute($row);
        $file->next();
    }
     
     
    /* On peut maintenant utiliser les fonctions mysql pour trier les résultats (ci-dessous je les affiche simplement. Attention si le csv est important car l'affichage de beaucoup de lignes risque de faire ramer l'ordi)*/
     
    // Pour affichage des champs
    print_r($tab_champs);
     
    $query = $dbh->query("SELECT * FROM $table_temp");
     
     
    echo '<table>';
     
    while($row = $query->fetch(PDO::FETCH_ASSOC))
    {
     
          echo '<tr><td>' . implode('</td><td>', $row) . '</td></tr>';
    }
     
    echo '</table>';
    ?>
    Si tes fichiers csv sont trop gros ou que tu veux économiser la mémoire tu peux monter mysqlite dans un fichier temporaire (mais évidemment c'est beaucoup moins rapide que de travailler directement avec la mémoire) en faisant comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    $temp = tmpfile();
    $info = stream_get_meta_data($temp);
    $info_name = $info['uri'];
     
    try
    {
        $dbh = new PDO("sqlite:$info_name");
        $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
    }
    catch(PDOException $e)
    {
        exit($e->getMessage());
    }

Discussions similaires

  1. [CSV] Créer un fichier CSV en PHP
    Par reedbedroom dans le forum Langage
    Réponses: 2
    Dernier message: 01/04/2009, 14h10
  2. Importer un fichier .csv avec php et PDO
    Par Touny dans le forum Langage
    Réponses: 6
    Dernier message: 05/03/2009, 17h45
  3. Réponses: 1
    Dernier message: 10/01/2008, 13h52
  4. [CSV] Créer un fichier csv depuis php
    Par jbidou88 dans le forum Langage
    Réponses: 5
    Dernier message: 07/05/2007, 17h41
  5. [CSV] Fichier CSV en PHP
    Par rimeh dans le forum Langage
    Réponses: 1
    Dernier message: 11/01/2007, 12h01

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