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

C Discussion :

Parsing d'un fichier texte


Sujet :

C

  1. #1
    Membre du Club
    Inscrit en
    Mars 2005
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 137
    Points : 42
    Points
    42
    Par défaut Parsing d'un fichier texte
    Bonjour g un fichier qui a cette structure là :

    12ca_ CAH2_MOUSE 68 52 0.00
    12ca_ CAH2_CHICK 68 52 0.00
    12ca_ CAHC_RABIT 208 240 5.94
    12ca_ CAH2_TRIHK 77 36 0.00
    12ca_ CAHZ_BRARE 64 49 0.00
    12ca_ CAHE_HUMAN 135 156 6.03
    12ca_ CAHE_HUMAN 190 213 0.00
    12ca_ CAH8_HUMAN 23 47 1.18
    12ca_ CAH4_RABIT 189 216 0.00
    12ca_ CAH5_MOUSE 192 208 0.00
    12ca_ CA5B_HUMAN 79 75 0.00
    et j'ai ecrit ce programme pour le lire, au fait je veut envoyé chaque ligne du fichier dans une autre routine pour la traiter mais je sais pas comment faire pour separer par exemple les 12ca_ CAH_MOUSE 68 et 52 dans des variable de type char char int int
    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
    void readfromfile(char*name){
     
    int i,length,t,filesize;
    FILE *fic;
    char command[256]; 
    char *chaine; 
    fic = fopen(name,"r");
    if(fic==NULL)
    {
    <div style="margin-left:40px"> printf("Can not open the file %s\n",name);</div>}
    fseek(fic,0,SEEK_END);
    length=ftell(fic);
    fseek(fic,0,SEEK_SET);
    chaine=(char*)malloc(length*sizeof(char));
    fread(chaine,length,1,fic);
    fclose(fic);
    i=0;
    t=0;
    //command=(char*)malloc(length*sizeof(char));
    filesize=0; 
    for (i=0;i<length;i++){
    <div style="margin-left:40px"> if (chaine[i]=='\n') filesize++;</div>} 
    printf("%d \n",filesize);
    fic = fopen(name,"r");
    for(t=0;t<filesize;t++){
    fgets(command,length,fic);
    printf("%s \n",command);
    }
    fclose(fic);
    }

  2. #2
    Membre expérimenté
    Avatar de granquet
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    1 201
    Détails du profil
    Informations personnelles :
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 201
    Points : 1 421
    Points
    1 421
    Par défaut
    c'est mieux de mettre le code dans des balises code ... ces balises permettent de garder l'indentation (et ptetre de faire de la coloration syntaxique avec le nouveau forum?)


    pour separer tes lignes en plusieurs elements, il y'as plusieurs methodes.
    une fois que tu as lut ta chaine sans erreur: soit:
    -utiliser sscanf
    -utiliser strtok et faire les conversions a l'aide de strtol
    -coder ta propre fonction (surtout si tu veux apprendre des choses et reflechir un peu) en testant charactere par charactere. (ou alors utiliser strchr ... fin, y'as des tas de possiblités de ce coté la)

    sinon concernant ton code, c'est une bonne idée de tester le retour de fopen; mais s'il echoue, tu fait un printf et tu continue :: segfault assuré.
    click my www
    ............|___
    ...................\
    .................._|_
    ..................\ /
    ..................."

  3. #3
    Expert éminent sénior
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Points : 13 380
    Points
    13 380
    Par défaut
    Citation Envoyé par anibal
    Bonjour g un fichier qui a cette structure là :

    12ca_ CAH2_MOUSE 68 52 0.00
    12ca_ CAH2_CHICK 68 52 0.00
    12ca_ CAHC_RABIT 208 240 5.94
    12ca_ CAH2_TRIHK 77 36 0.00
    12ca_ CAHZ_BRARE 64 49 0.00
    12ca_ CAHE_HUMAN 135 156 6.03
    12ca_ CAHE_HUMAN 190 213 0.00
    12ca_ CAH8_HUMAN 23 47 1.18
    12ca_ CAH4_RABIT 189 216 0.00
    12ca_ CAH5_MOUSE 192 208 0.00
    12ca_ CA5B_HUMAN 79 75 0.00
    et j'ai ecrit ce programme pour le lire, au fait je veut envoyé chaque ligne du fichier dans une autre routine pour la traiter mais je sais pas comment faire pour separer par exemple les 12ca_ CAH_MOUSE 68 et 52 dans des variable de type char char int int
    C'est pas la balise citation qu'il faut mettre mais la balise code.

    Pourquoi faire compliquer quand on peut faire simple.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    [...]file = fopen[...]
    [...]
    fgets(buffer, sizeof buffer, file);
    if(buffer == NULL) { fclose(file); return; }
    if(sscanf(buffer, "%s %s %d %d %f", s1, s2, &entier1, &entier2, &double) != 5) { fclose(file); return; }
    [...]
    Introduction à Silverlight 4 (new) ; Localisation d'une application Silverlight (new) ;
    Mon espace perso[/B]

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. Albert Einstein[/SIZE]

Discussions similaires

  1. Problème de parsing simple de fichier texte
    Par nikko49 dans le forum Langage
    Réponses: 5
    Dernier message: 14/01/2013, 08h25
  2. [SAX] Parsing XML et récupération des attributs en fichier texte
    Par flora806 dans le forum Format d'échange (XML, JSON...)
    Réponses: 0
    Dernier message: 30/06/2009, 16h13
  3. Parsing fichier texte volumineux
    Par LeChacal619 dans le forum Documents
    Réponses: 1
    Dernier message: 19/12/2008, 01h15
  4. Réponses: 13
    Dernier message: 03/09/2007, 23h21
  5. parsing de fichier texte
    Par robert_trudel dans le forum Access
    Réponses: 4
    Dernier message: 03/06/2006, 17h45

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