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 :

Problème parsing fichier Windows / Mac OS / Linux


Sujet :

C

  1. #1
    Membre averti Avatar de vdumont
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    510
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 510
    Points : 369
    Points
    369
    Par défaut Problème parsing fichier Windows / Mac OS / Linux
    Bonjour, j'ai un problème de parsing avec mon programme sur différentes plate-formes.

    J'ai une fonction qui lit un fichier texte.
    Le fichier texte comporte 2 parties, séparées par un signe '$'

    La premiere comporte 1 mot par ligne, et la liste de ses flexions sur la ligne suivante.

    La deuxième comporte des synonymes.

    Le programme fonctionne correctement à 100% sous Windows, cependant sous Mac OS il y a un petit hic:

    La première partie du fichier est lue et mise en mémoire correctement.
    La deuxième partie du fichier semble être lu correctment (en printant les mots 1 par 1 avec un printf les mots correspondent aux synonymes dans le fichier) cependant c'est comme s'il ne se gardait pas en mémoire

    Est-ce que j'omet un détail?
    Voici le code et le fichier texte en question

    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
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    DictSyn chargerDictSyn(FILE * ptrFichier, int *err)
    {
        DictSyn d = initDictSyn();
        char ligne[MAX_LIGNE];
        char *token;
        char *root = (char*) malloc(sizeof(char) * MAX_LIGNE);
        int group;
        int i;
     
        if (ptrFichier == NULL)
        {
            *err = FNO;
            return d;
        }
     
        /* lire la premiËre partie de fichier */
        i = 1;
        fgets(ligne, MAX_LIGNE, ptrFichier);
        while (ligne[0] != '$')
        {
            /* casser la ligne en mots */
            if (ligne != NULL)
            {
                token = strtok(ligne, " \n");
                while (token != NULL)
                {
                    if (i%2 != 0)
                    {
                        strcpy(root, token);   /* memoriser mot racine */
                        d = ajoutRacine(d, token, err);
                    }
                    else
                    {
                        d = ajoutFlexion(d, root, token, err);
                    }
                    token = strtok(NULL, " \n");
                }
            }
     
            i++;
            fgets(ligne, MAX_LIGNE, ptrFichier);
        }
     
        /* lire deuxième partie du fichier */
        while (!feof(ptrFichier))
        {
            fgets(ligne, MAX_LIGNE, ptrFichier);
            token = strtok(ligne, " \n");
     
            group = -1;
     
            if(token != NULL)
            {
                strcpy(root,token);   /* memoriser mot racine */
                token = strtok(NULL, " ");
     
                /* creer groupes synonymes */
                while (token != NULL)
                {
    		d = ajoutSynonyme(d, root, token, &group, err);
                    token = strtok(NULL, " \n");
                }
            }
        }
     
        *err = OK;
        return d;
    }
    Merci beaucoup.
    Fichiers attachés Fichiers attachés

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par vdumont
    Est-ce que j'omet un détail?
    Oui, de poster un code qui compile !
    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
    Project   : Forums
    Compiler  : GNU GCC Compiler (called directly)
    Directory : C:\dev\forums2\
    --------------------------------------------------------------------------------
    Switching to target: default
    Compiling: main.c
    main.c:1: error: syntax error before "chargerDictSyn"
    main.c:1: error: syntax error before '*' token
    main.c:2: warning: return type defaults to `int'
    main.c:2: warning: function declaration isn't a prototype
    main.c: In function `chargerDictSyn':
    main.c:3: error: `DictSyn' undeclared (first use in this function)
    main.c:3: error: (Each undeclared identifier is reported only once
    main.c:3: error: for each function it appears in.)
    main.c:3: error: syntax error before "d"
    main.c:4: error: `MAX_LIGNE' undeclared (first use in this function)
    main.c:6: warning: implicit declaration of function `malloc'
    main.c:10: error: `ptrFichier' undeclared (first use in this function)
    main.c:10: error: `NULL' undeclared (first use in this function)
    main.c:12: error: `err' undeclared (first use in this function)
    main.c:12: error: `FNO' undeclared (first use in this function)
    main.c:13: error: `d' undeclared (first use in this function)
    main.c:18: warning: implicit declaration of function `fgets'
    main.c:24: warning: implicit declaration of function `strtok'
    main.c:24: warning: assignment makes pointer from integer without a cast
    main.c:29: warning: implicit declaration of function `strcpy'
    main.c:30: warning: implicit declaration of function `ajoutRacine'
    main.c:34: warning: implicit declaration of function `ajoutFlexion'
    main.c:36: warning: assignment makes pointer from integer without a cast
    main.c:45: warning: implicit declaration of function `feof'
    main.c:48: warning: assignment makes pointer from integer without a cast
    main.c:55: warning: assignment makes pointer from integer without a cast
    main.c:60: warning: implicit declaration of function `ajoutSynonyme'
    main.c:61: warning: assignment makes pointer from integer without a cast
    main.c:66: error: `OK' undeclared (first use in this function)
    main.c:4: warning: unused variable `ligne'
    Process terminated with status 1 (0 minutes, 2 seconds)
    13 errors, 16 warnings
    Je veux bien aider, mais je ne veux pas passer une heure à faire de la rétro-ingénierie et inventer du code qui est peut être différent chez toi et qui marchera chez moi...
    Pas de Wi-Fi à la maison : CPL

  3. #3
    Membre averti Avatar de vdumont
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    510
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 510
    Points : 369
    Points
    369
    Par défaut
    Je n'avais pas posté le reste du code pour na pas décourager certains membres (les fichiers sources sont assez volumineux) et puisque j'étais certain que l'erreur était au niveau du parsing (interpretation des fins de ligne, des fins de fichiers etc) je n'avais posté que ca.

    J'ai trouvé l'errer, il semble que \r est parfois utilisé comme retour de ligne sous Mac OS X

  4. #4
    Membre éprouvé
    Avatar de Pouic
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    669
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 669
    Points : 977
    Points
    977
    Par défaut
    Citation Envoyé par vdumont
    Je n'avais pas posté le reste du code pour na pas décourager certains membres (les fichiers sources sont assez volumineux) et puisque j'étais certain que l'erreur était au niveau du parsing (interpretation des fins de ligne, des fins de fichiers etc) je n'avais posté que ca.

    J'ai trouvé l'errer, il semble que \r est parfois utilisé comme retour de ligne sous Mac OS X
    Uniquement avec les fichiers en relation avec des reliquats d'applications Mac OS9 (où la fin de ligne était '\r'). Depuis X, l'os est un unix "normal", avec des terminaisons de ligne de '\n'.
    Et sous ouidows, si je ne me trompe, c'est '\r\n'
    Software becomes slower faster than hardware becomes faster
    [size=1]
    http://xrenault.developpez.com

  5. #5
    Membre averti Avatar de vdumont
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    510
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 510
    Points : 369
    Points
    369
    Par défaut
    Ah voila! C'est ce qui explique pourquoi j'avias des \r avant ahah (Les fichiers textes ont été créés sous Windows)

    Merci!

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par vdumont
    Ah voila! C'est ce qui explique pourquoi j'avias des \r avant ahah (Les fichiers textes ont été créés sous Windows)
    A lire d'urgence : http://emmanuel-delahaye.developpez....s.htm#fichiers
    Pas de Wi-Fi à la maison : CPL

  7. #7
    Membre averti Avatar de vdumont
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    510
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 510
    Points : 369
    Points
    369
    Par défaut
    Je vois aucune référence au '\r' ??

  8. #8
    Membre éprouvé
    Avatar de Pouic
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    669
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 669
    Points : 977
    Points
    977
    Par défaut
    Citation Envoyé par vdumont
    Je vois aucune référence au '\r' ??
    Ben si.
    CR == '\r'
    LF == '\n'
    Software becomes slower faster than hardware becomes faster
    [size=1]
    http://xrenault.developpez.com

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par vdumont
    Je vois aucune référence au '\r' ??
    OK, ce n'est pas explicite. Je le rajoute.
    (CR = '\r' en C sur plateforme ASCII)
    Pas de Wi-Fi à la maison : CPL

  10. #10
    Membre averti Avatar de vdumont
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    510
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 510
    Points : 369
    Points
    369
    Par défaut
    Merci!

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

Discussions similaires

  1. Problème nom fichier avec accent Mac -> Windows
    Par shinchan dans le forum Mac OS X
    Réponses: 5
    Dernier message: 26/08/2013, 22h14
  2. Réponses: 0
    Dernier message: 13/07/2009, 17h28
  3. Réponses: 8
    Dernier message: 25/02/2009, 16h52
  4. Réponses: 9
    Dernier message: 16/05/2006, 16h02

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