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 :

parser un fichier en C


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2005
    Messages
    288
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 288
    Par défaut parser un fichier en C
    Bonjour bonjour !

    je code du C sous unix.
    j'ai un fichier contenant des chaines de caractères (noms), écrit chacun sur une ligne.

    Je veux récupérer chaque ligne dans un tableau...

    est-ce que quelqu'un a une solution intéressante. je pense qu'il faut parser le fichier, mais je n'est pas trop d'idée... quelqu'un a du code ?

  2. #2
    Membre émérite
    Avatar de Freed0
    Profil pro
    Étudiant
    Inscrit en
    Mars 2005
    Messages
    635
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2005
    Messages : 635
    Par défaut
    Salut,

    Si tu n'as qu'un nom par ligne, il suffit de lire le fichier séquenciellement ligne par ligne et de stocker chaque ligne "dans une case du tableau"

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2005
    Messages
    288
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 288
    Par défaut
    oui mais comment lire ligne par ligne? caractère par caractère ok, mais par ligne...

  4. #4
    Membre émérite
    Avatar de Freed0
    Profil pro
    Étudiant
    Inscrit en
    Mars 2005
    Messages
    635
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2005
    Messages : 635
    Par défaut
    Regarde après la fonction fgets()

  5. #5
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    En utilisant fgets.

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2005
    Messages
    288
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 288
    Par défaut
    ok voilà ce que je fais :

    avant le main :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    #define CONFIC "../../server/config/nomFichier"
    FILE *f_in;	/* pointeur sur FILE */
    char *serverList;
    ..........

    dans le main :
    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
    serverList = (char*)malloc(3*sizeof(char));
    /* Lecture du fichier de conf pour connaitre la liste des serveurs */
    	if((f_in = fopen(CONFIC, "r")) == NULL)
    	{
    		fprintf(stderr, "\nError : failed to open file %s\n", CONFIC);
    		return(EXIT_FAILURE);
    	}
     
    	int i = 0;
     
    	while(fgets(serverList, 3*sizeof(char), f_in) != NULL) /* stop sur fin de fichier ou erreur */
    	{
    		/* utilisation de ligne */
    	}
     
    	printf(serverList[0]);
     
    	fclose(f_in);
    sauf que j'ai du me planter quelque part, car printf(serverList[0]); plante à la compil

    edit : pour info, mon fichier est du type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    nom1.server.fr
    nom2.server.fr
    nom3.server.fr

  7. #7
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    printf("%c",serverlist[0]);
    En plus tu as pas alloué plusieurs chaines de caractère mais juste une de 3 caractères...

  8. #8
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par chti_juanito
    ok voilà ce que je fais :
    <...>
    Ce code est inutilement complexe. Ceci fonctionne :
    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
     
    #include <stdlib.h>
    #include <stdio.h>
     
    #if 0
    #define CONFIC "../../server/config/nomFichier"
    #else
    #define CONFIC "test.txt"
    #endif
     
    int main (void)
    {
       int ret = EXIT_SUCCESS;
       /* Lecture du fichier de conf pour connaitre la liste des serveurs */
       FILE *f_in = fopen (CONFIC, "r");
       if (f_in != NULL)
       {
          char ligne[128];
          /* stop sur fin de fichier ou erreur */
          while (fgets (ligne, sizeof ligne, f_in) != NULL)
          {
             /* utilisation de ligne */
             printf ("%s", ligne);
          }
          fclose (f_in);
       }
       else
       {
          perror (CONFIC);
          ret = EXIT_FAILURE;
       }
     
       return ret;
    }
    Maintenant, si tu veux stocker l'ensemble des lignes quelque part, il faut compter, lignes, créer un tableau de pointeurs sur char * (char **) et stocker les adresses des copies de lignes dans le tableau (strdup()). Mais c'est un autre problème.

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2005
    Messages
    288
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 288
    Par défaut
    re...

    il m'arrive quelque chose de trés bizarre...

    je récupère bien les chaines qui sont dans mon tableau, puisque lorsque je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     printf("%s", serverList[0]);
    printf("%s", serverList[1]);
    ça m'affiche bien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    server02.truc.fr
    server03.truc.fr
    mais juste après cette affichage, je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    for(i = 0; i < nb_elem+1; i++)
    {	
              if(pthread_create(&tab_thread[i], NULL, start_script_process, (void*)serverList[i]) < 0)
              {
    	    fprintf(stderr, "pthread_create error\n");
    	    exit(1);
               }
    }
    puis une connection sur les serveurs, et là j'ai une erreur comme quoi par exemple "serverO2.truc.fr" est un nom inconnu...

    Or, si avant la boucle "for", je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    serverList[0] = "ccsrb02.in2p3.fr";
    serverList[1] = "ccsrb03.in2p3.fr";
    serverList[2] = "ccsrb05.in2p3.fr";
    ça marche nichel !!

    j'en ai donc déduit, que si je passe par le tableau, ça foire. Mais pk ??

    donc voilou j'espère avoir été suffisamment clair, et si vous avez une solution, jss vraiment preneur :p

    edit : et pendant que j'y suis, si quelqu'un a une vraie solution pour parser un fichier C, car à terme, dans le fichier de conf, je vais me retrouver avec des cractères du genre # et tout, donc il va falloir que je fasse le tri

  10. #10
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut


    D'abord il y a quelque chose qui m'attriste profondément.....

    Se lancer dans un programme qui a l'air complexe SANS AVOIR les bases de C, c'est du suicide, plus une mauvaise manière d'apprendre.

    Et si c'est pas une manière d'apprendre mais du travail, alors les gens qui t'ont embauché sont nuls...

    Citation Envoyé par chti_juanito
    ...
    edit : et pendant que j'y suis, si quelqu'un a une vraie solution pour parser un fichier C, car à terme, dans le fichier de conf, je vais me retrouver avec des cractères du genre # et tout, donc il va falloir que je fasse le tri

    Maintenant une précision : ce n'est pas un fichier C que tu veux parser.

    C'est faire un programme C pour parser un fichier quelconque....

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

Discussions similaires

  1. [SAX] parser un fichier xml en Java
    Par royou dans le forum Format d'échange (XML, JSON...)
    Réponses: 1
    Dernier message: 10/02/2005, 17h12
  2. parser un fichier .dtd
    Par bgranou dans le forum Valider
    Réponses: 2
    Dernier message: 04/06/2004, 19h53
  3. parser des fichier .xml en perl
    Par djibril dans le forum Modules
    Réponses: 13
    Dernier message: 18/05/2004, 17h08
  4. parser un fichier avec xerces
    Par traiangueul dans le forum XML/XSL et SOAP
    Réponses: 9
    Dernier message: 02/02/2004, 18h14
  5. parser un fichier html
    Par noarno dans le forum ASP
    Réponses: 2
    Dernier message: 10/12/2003, 17h53

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