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 ye file


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Novembre 2007
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 46
    Par défaut parsing ye file

    Bonjour,
    Je débute en C et j'essai actuellement de lire et imprimer un fichier. Mon code est le suivant :
    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
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <errno.h>
     
    void readFile(char* fileName, int result)
    {
        int ok = 1;
        char readChar;
        FILE *readFile;
        readFile = fopen(fileName, "r");
     
        if(readFile == 0)
        {
            perror(fileName);
            result = 1;
        }
     
        while(ok != 0)
        {
            readChar = fgetc(readFile);
            if((feof(readFile) != 0) || (ferror(readFile) != 0))
            {
                ok = 0;
            }
            else
            {
                printf("%c", readChar);
            }
        }
        fclose(readFile);
        result = 0;
    }
     
    int main(int argc, char **argv )
    {
        int result = 0;
    	if (!(argc==2)){
    		fprintf(stderr,"ERROR\n");
    		return 1;
    	}
        readFile(argv[1], result);
        return result;
    }
    le nom du fichier est lu en command line argument. Je voudrais tout d'abord savoir si ce code vous semble correct. Puis, je voudrais savoir comment m'y prendre si je veux n'imprimer que certaines lignes du fichier. Par exemple, si la ligne contient un entier, alors imprimer la ligne.
    Merci d'avance,
    Jo

  2. #2
    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 jocelyn54 Voir le message
    le nom du fichier est lu en command line argument. Je voudrais tout d'abord savoir si ce code vous semble correct.
    Ceci est correct :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
       char readChar;
    <...>
       while (ok != 0)
       {
          readChar = fgetc (readFile);
          if ((feof (readFile) != 0) || (ferror (readFile) != 0))
    mais inutilement complexe. La forme canonique est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
       int readChar;
    <...>
       while ((readChar = fgetc (readFile)) != EOF)
       {
    Puis, je voudrais savoir comment m'y prendre si je veux n'imprimer que certaines lignes du fichier. Par exemple, si la ligne contient un entier, alors imprimer la ligne.
    Soit tu lis le fichier caractères par caractères comme tu as fait et tu utilises une machine à état pout stocker les lignes, déterminer si elle contiennent un entier ([+|-]0-9[*]), puis afficher la ligne qui répond au critère, soit il faut lire le fichier ligne par ligne avec fgets() analyser le contenu et afficher la ligne selon le même critère.

  3. #3
    Membre averti
    Inscrit en
    Novembre 2007
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 46
    Par défaut
    Citation Envoyé par -ed-
    Soit tu lis le fichier caractères par caractères comme tu as fait et tu utilises une machine à état pout stocker les lignes, déterminer si elle contiennent un entier ([+|-]0-9[*]), puis afficher la ligne qui répond au critère, soit il faut lire le fichier ligne par ligne avec fgets() analyser le contenu et afficher la ligne selon le même critère.
    Pourrais tu me montrer un exemple de code utilisant fgets de cette manière? car je ne sais pas comment faire

  4. #4
    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 jocelyn54 Voir le message
    Pourrais tu me montrer un exemple de code utilisant fgets de cette manière? car je ne sais pas comment faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    .
       char ligne[123];
       while (fgets(ligne, sizeof ligne, stdin) != NULL)
       {
    Mais tu aurais dû lire la doc avant...

    http://man.developpez.com

  5. #5
    Membre averti
    Inscrit en
    Novembre 2007
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 46
    Par défaut
    Je n'y arrive pas :'(, rien que lire ligne par ligne, je suppose que ça se fait avec le while que tu viens d'écrire mais après, les lignes se stock comment et le test se fait à l'aide d'une certaine fonction?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    while (fgets(line, sizeof ligne, stdin) != NULL)
        {
            readChar = fgets(readFile);
            if(strchr(line,(0-9[*]))  //si je veux que tester pour un entier contenant // au plus 5 digits sans + ni -.
            {
                printf("%c", readChar);
            }
            else
            {
                //ligne suivante
            }
        }

  6. #6
    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 jocelyn54 Voir le message
    Je n'y arrive pas :'(, rien que lire ligne par ligne, je suppose que ça se fait avec le while que tu viens d'écrire mais après, les lignes se stock comment et le test se fait à l'aide d'une certaine fonction?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    while (fgets(line, sizeof ligne, stdin) != NULL)
        {
            readChar = fgets(readFile);
    Mais c'est quoi ça ? La lecture est déjà faite dans la boucle. Faut pas taper n'importe quoi au hasard...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
            if(strchr(line,(0-9[*]))  //si je veux que tester pour un entier contenant // au plus 5 digits sans + ni -.
    Ceci n'est évidemment pas du C, mais une notation qui signifie un nombre quelconque de caractères 'chiffres' (0-9).

    - Test de validité : pour chaque caractère : strchr("0123456789", c) ou isdigit(c).
    - Test de la longueur : comptage (bien gérer le reset).

Discussions similaires

  1. Error Parsing file.
    Par Nowwis dans le forum NetBeans
    Réponses: 0
    Dernier message: 12/03/2012, 09h13
  2. ANTLR parsing file C#
    Par MahdiSeg dans le forum C#
    Réponses: 2
    Dernier message: 29/09/2011, 14h49
  3. [SAX] Parsing XML file
    Par zouzino dans le forum Format d'échange (XML, JSON...)
    Réponses: 16
    Dernier message: 22/09/2007, 18h06
  4. error: parse error before "FILE"
    Par v4np13 dans le forum C
    Réponses: 4
    Dernier message: 20/12/2006, 18h01
  5. [XSLT] Error while parsing XSL file (unknown protocol: e)
    Par SONY30 dans le forum Format d'échange (XML, JSON...)
    Réponses: 1
    Dernier message: 26/09/2006, 13h58

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