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 :

Ignorer un caractere lors de la lecture


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Août 2004
    Messages
    201
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 201
    Par défaut Ignorer un caractere lors de la lecture
    Bonjour,

    J'effectue la lecture d'un fichier a partir de stdin.

    ce fichier ressemble a cela:
    #FALL_2007_STATS Hall_ID Rooms Beds Occup Pct_Occup
    Apartment_Residence_Hall 1 306 1050 1013 96%
    Clement_Hall 2 353 689 688 100%
    #Gibbs_Hall 3 116 216 186 86%
    #Greve_Hall 4 199 358 317 89%
    #Hess_Hall 5 512 954 946 99%
    la lecture se fait comme suit:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     fp = fopen("residencehalls.txt","r");
      while( !feof(fp) ){
              fscanf(fp, "%s %i %i %i %i %s", inf[f].name, &inf[f].id, &inf[f].rooms, &inf[f].beds, &inf[f].occ, inf[f].pocc);
              f++;
             }
    Mais cela n'exclut pas le DIESE '#' ni la première ligne.

    Est ce que vous avez des idées sur comment rendre le programme lire le fichier sans les dièse ET par la même occasion ignorer la première ligne.

    et merci...

  2. #2
    Invité(e)
    Invité(e)
    Par défaut
    Bonjour,

    On peut imaginer ne valider l'entrée que si le premier caractère de inf[f].name est différent de '#'.

    Au passage, feof ne fait pas ce que tu pense :

    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
    FILE * fp = fopen("residencehalls.txt","r");
    int conv;
    do {
        conv = fscanf(fp, "%s %i %i %i %i %s", inf[f].name, &inf[f].id, 
                      &inf[f].rooms, &inf[f].beds, &inf[f].occ, inf[f].pocc);
        if('#' != inf[f].name[0]) {
            ++f;
        }
    } while(0 != conv);
    if(feof(fp)) {
        printf("fin de fichier\n");
    }
    if(ferror(fp)) {
        perror("erreur pendant la lecture\n");
    }

  3. #3
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    char Ligne[256] ;
    int   f=0 ;
     
    ...
    while ( fgets(Ligne, 256, fp) != NULL )
    {
       if ( Ligne[0] != '#' )
         {
            sscanf(Ligne, "%s %i %i %i %i %s", inf[f].name, &inf[f].id, 
                      &inf[f].rooms, &inf[f].beds, &inf[f].occ, inf[f].pocc);
            f++ ;
         }
    }
    @virtuadrak : et feof NE SERT PAS A DETECTER LA FIN DE LA LECTURE !!!

  4. #4
    Expert confirmé
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Par défaut
    @souviron34 : je préfère ton code (utilisation de fgets + sscanf) à celui de mabu mais l'usage qu'il a fait de feof est correct. Ce n'était donc pas la peine de crier aussi fort ...

  5. #5
    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
    Citation Envoyé par Melem Voir le message
    mais l'usage qu'il a fait de feof est correct. Ce n'était donc pas la peine de crier aussi fort ...
    Ce n'était pas à l'intention de mabu mais du PO

    je rajoute une adresse

  6. #6
    Expert confirmé
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Par défaut
    Citation Envoyé par souviron34 Voir le message
    Ce n'était pas à l'intention de mabu mais du PO

    je rajoute une adresse
    A l'attention ... . OK j'ai rien dit alors .

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

Discussions similaires

  1. Ignorer des caractères lors d'une lecture fichier
    Par Inaky dans le forum Langage
    Réponses: 9
    Dernier message: 06/11/2011, 15h25
  2. Réponses: 1
    Dernier message: 07/07/2008, 12h47
  3. Réponses: 8
    Dernier message: 20/09/2007, 19h44
  4. Réponses: 14
    Dernier message: 30/03/2005, 21h50
  5. [cvs] Ignorer un fichier lors du synchronise
    Par lfournial dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 04/03/2004, 09h16

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