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 :

Parser un fichier texte


Sujet :

Langage PHP

  1. #1
    Membre éclairé
    Avatar de unix27
    Inscrit en
    Septembre 2003
    Messages
    338
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Septembre 2003
    Messages : 338
    Par défaut Parser un fichier texte
    Bonsoir, j'ai un fichier texte avec la structure suivante:
    1-les ; représentent les colonnes.
    2- les | représentent les lignes.
    en résumer j'ai ce fichier test.txt par exemple:
    abcd;
    123
    efghi;8854556|jklm;5546aaa;nopqrs
    et je souhaite remplir un tableau avec ça:
    $tab[1][1]=abcd
    $tab[1][2]=123efghi
    $tab[1][3]=8854556
    $tab[2][1]=jklm
    $tab[2][1]5546aaa
    $tab[2][1]nopqrs

    Avant que je plonge dans les fonctions et les délimiteurs... php est ce qu'il a une solution avec par exemple preg_match_all() ou autres qui fait ce que je cherche?
    à consulter avant de poster ... la FAQ de C#

  2. #2
    Expert confirmé

    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
    Par défaut
    des explode suffiront, d’où vient ce type de donnée ?

  3. #3
    Membre éclairé
    Avatar de unix27
    Inscrit en
    Septembre 2003
    Messages
    338
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Septembre 2003
    Messages : 338
    Par défaut
    Citation Envoyé par stealth35 Voir le message
    des explode suffiront, d’où vient ce type de donnée ?
    le fichier test.txt est alimenté à partir d'un site web
    à consulter avant de poster ... la FAQ de C#

  4. #4
    Expert confirmé

    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
    Par défaut
    Citation Envoyé par unix27 Voir le message
    le fichier test.txt est alimenté à partir d'un site web
    ta pas possibilité de changer ce format ?

    (les explode marchent ?

  5. #5
    Membre éclairé
    Avatar de unix27
    Inscrit en
    Septembre 2003
    Messages
    338
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Septembre 2003
    Messages : 338
    Par défaut
    Citation Envoyé par stealth35 Voir le message
    ta pas possibilité de changer ce format ?

    (les explode marchent ?
    apparemment les explode ne marche pas
    j'ai utilisé ce bout de code pour commencé:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    $file = fopen("test.txt", "r");
    //Output a line of the file until the end is reached
    while(! feof($file))
      {
      $ligne=explode("|", $file);
     
      }
    fclose($file);////////////////////////////////////////
    echo $ligne[0];
    echo '<br />';
    echo $ligne[1];
    le tableau $ligne est vide
    oui je peux changé le format le quel je met?
    à consulter avant de poster ... la FAQ de C#

  6. #6
    Expert confirmé

    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
    Par défaut
    fait plutot un CSV (fputcsv pour creer, fgetcsv pour lire)

  7. #7
    Membre éclairé
    Avatar de unix27
    Inscrit en
    Septembre 2003
    Messages
    338
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Septembre 2003
    Messages : 338
    Par défaut
    Citation Envoyé par stealth35 Voir le message
    fait plutot un CSV (fputcsv pour creer, fgetcsv pour lire)
    j'ai pas su utilisé le fputcsv il me génère des erreurs du coup j'ai bricolé avec ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    $fichier=fopen("test.csv","a+");
     
    for($i=0; $i<=10 ; $i++) 
    {
       for($j=1; $j<=5 ; $j++) 
        {
       fputs($fichier,$taburl[$i][$j]);
       fputs($fichier,";"); 
    	}
       fputs($fichier,"|"); 
     
    }
    fclose($fichier);			// fermeture fichier
    ceci marche bien lors de la création reste maintenant le parcours de ce même fichier et mettre les valeurs dans un tableau
    à consulter avant de poster ... la FAQ de C#

  8. #8
    Expert confirmé

    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
    Par défaut
    pourquoi faire des for ???

    c'est juste

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $fichier=fopen('test.csv', 'a+');
     
    foreach($taburl as $row)
    {
        fputcsv($fichier, $row, ';');
    }
     
    fclose($fichier);

  9. #9
    Membre éclairé
    Avatar de unix27
    Inscrit en
    Septembre 2003
    Messages
    338
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Septembre 2003
    Messages : 338
    Par défaut
    Citation Envoyé par stealth35 Voir le message
    pourquoi faire des for ???

    c'est juste

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $fichier=fopen('test.csv', 'a+');
     
    foreach($taburl as $row)
    {
        fputcsv($fichier, $row, ';');
    }
     
    fclose($fichier);
    malheureusement ça ne marche pas
    à consulter avant de poster ... la FAQ de C#

  10. #10
    Expert confirmé

    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
    Par défaut
    qu'est ce qui ne marche pas ?

  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 : 41
    Localisation : France

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    Hum... Je suppose que ce qui cloche, c'est que fputcsv fait une ligne par tableau alors que unix27 voudrait un | comme séparateur de lignes...

    En méthode bourrin, avec juste des explodes et des implodes, je suppose qu'on doit pouvoir faire un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $file = file_get_contents('test.txt');
    $lignes = explode('|', $file);
    $data = array();
    foreach ($lignes as $ligne) {
        $data[] = explode(';', $ligne);
    }
    et vice-versa :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $lignes = array();
    foreach ($data as $dataLigne) {
        $lignes[] = implode(';', $dataLigne);
    }
    $file = implode('|', $lignes);
    file_put_contents('test.txt', $file);
    Mais c'est très moche, ça ne gère probablement pas les retours à la ligne, ni les cas où tu as un séparateur dans un corps de texte et ainsi de suite... Ce serait mieux si on arrivait à quelque chose avec fputcsv et fgetcsv (ou que tu changeais de format pour avoir un format un peu moins ésotérique )
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  12. #12
    Membre éclairé
    Avatar de unix27
    Inscrit en
    Septembre 2003
    Messages
    338
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Septembre 2003
    Messages : 338
    Par défaut
    Citation Envoyé par stealth35 Voir le message
    qu'est ce qui ne marche pas ?
    il s'agissais de la fonction fputcsv par les explode marche bien puisque j'ai réussi a avoir la boucle que je cherché



    Citation Envoyé par Celira Voir le message
    Hum... Je suppose que ce qui cloche, c'est que fputcsv fait une ligne par tableau alors que unix27 voudrait un | comme séparateur de lignes...

    En méthode bourrin, avec juste des explodes et des implodes, je suppose qu'on doit pouvoir faire un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $file = file_get_contents('test.txt');
    $lignes = explode('|', $file);
    $data = array();
    foreach ($lignes as $ligne) {
        $data[] = explode(';', $ligne);
    }
    et vice-versa :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $lignes = array();
    foreach ($data as $dataLigne) {
        $lignes[] = implode(';', $dataLigne);
    }
    $file = implode('|', $lignes);
    file_put_contents('test.txt', $file);
    Mais c'est très moche, ça ne gère probablement pas les retours à la ligne, ni les cas où tu as un séparateur dans un corps de texte et ainsi de suite... Ce serait mieux si on arrivait à quelque chose avec fputcsv et fgetcsv (ou que tu changeais de format pour avoir un format un peu moins ésotérique )
    voici j'ai utilisé ça et il prend en compte les retours en ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    $contenu=file_get_contents('test.csv');
    $ligne=explode("|",$contenu);
    for($i=0;$i<count($ligne);$i++)
    {
      $j=0;
    $champ[$j]=...
    $j++
    $champ[$j]=..
    ...
    voila ligne parcour les ligne et champ me récupére les colonne
    merci a vous deux stealth35 et Celira
    à consulter avant de poster ... la FAQ de C#

  13. #13
    Expert confirmé

    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
    Par défaut
    pas de for mais foreach pour parcourir un array, pourquoi ne pas un CSV propre ou un serialize ?

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

Discussions similaires

  1. [2.2.1] Parser un fichier texte
    Par jamesleouf dans le forum BIRT
    Réponses: 3
    Dernier message: 12/05/2009, 16h09
  2. parser un fichier texte
    Par grome dans le forum Langage
    Réponses: 3
    Dernier message: 26/11/2008, 18h01
  3. parser un fichier texte
    Par okiri dans le forum Débuter
    Réponses: 9
    Dernier message: 23/02/2008, 14h23
  4. Comment parser un fichier texte en batch ?
    Par arnaudperfect dans le forum Scripts/Batch
    Réponses: 0
    Dernier message: 20/11/2007, 10h07
  5. Parser de fichier textes >> Logs Apache
    Par gregb34 dans le forum Langage
    Réponses: 2
    Dernier message: 17/02/2006, 19h34

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