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 :

fgets et ligne blanche


Sujet :

C

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 64
    Par défaut fgets et ligne blanche
    Salut,
    Je compare deux fichiers ligne par ligne.
    Je recupere deux lignes de deux fichiers differents que je compare.
    J'utilse fgets pour chaque fichiers.
    Seulement si une des deux lignes est blanche (un decalage ) je souhaite qu'il n'effetue pas de comparaison et qu'il avance vers la ligne suivante seulement dans le fichier ou il a trouvé une ligne balnche.

    Ce que je fait ne fonctionne pas, il ne detecte meme pas les lignes blanches. Mon test -if( line1[0]!='\n' || line2[0] != '\n' )- est toujours vrai meme quand il rencontre une ligne blanche :

    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
     
    while( fgets(line1,BUFFSIZE, theFile1)!=NULL  && fgets(line2,BUFFSIZE, theFile2)!=NULL ){
            //tant que je ne suis pas en fin de ligne ou en fin de fichier
           if( line1[0]!='\n' || line2[0] != '\n' ) {    
               k++; 
               if(strcmp(line1, line2) != 0) {
                    if((theFile3 = fopen("outResult", "a")) == NULL) {
                        fprintf(stderr, "Error while opening outResult file \n");
                        return EXIT_FAILURE;
                    }
     
                    ret = traitement_line (line1, line2, thePrecision);
                    if( ret == 1) {
     
                        fprintf(theFile3, "%s(line %d):\t%s\n", inFileName1, k, line1);
                        printf("%s(line %d):\t%s\n", inFileName1, k, line1);
     
                        fprintf(theFile3, "%s(line %d):\t%s\n", inFileName2, k, line2);
                        printf("%s(line %d):\t%s\n", inFileName2, k, line2);
                    }
                } 
            line1[0]='\0';line2[0]='\0';
            }
            else { 
                if (line1[0]='\n'){
                    line1[0]='\0';
                    continue;
                }
                else if(line1[0]='\n'){
                    line1[0]='\0';
                    continue;
                }
            }      
        }
     
        if (theFile1 != NULL) {
            fclose(theFile1);
        }
        if (theFile2 != NULL) {
            fclose(theFile2);
        }
        if (theFile3 != NULL) {
            fclose(theFile3);
        }
        return EXIT_SUCCESS;
    }
    merci de votre aide

  2. #2
    Expert confirmé

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Par défaut
    Ton algorithme est faux, c'est pour cela que ça ne fonctionne pas. Ce serait plutôt un && à la place du ou logique ||.

    Ensuite :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
            if (line1[0]='\n'){
                    line1[0]='\0';
                    continue;
                }
                else if(line1[0]='\n'){
                    line1[0]='\0';
                    continue;
                }
    Ne fonctionnera pas :
    - Cela ne sert à rien de mettre le caractère à '\0'
    - Lorsque le while va faire le test, il va faire une lecture pour les deux fichiers...

    Jc

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 299
    Par défaut
    Salut, effectue le test suivant :

    où line a été obtenue avec fgets

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 64
    Par défaut
    ca marche mieux avec le && mais comment faire pour qu'il ne change que la ligne ou il a trouvé une ligne blanche??

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 299
    Par défaut
    salut, si tu as une ligne blanche, il faut que tu repères le fichier dans lequel elle est et que tu refasses un fgets dans ce fichier.
    du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if(strcmp(line1,'\n')==0) fgets(line1,sizeof line1,file1);

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 64
    Par défaut
    Ca focntionne si je n'ai qu'une ligne blanche mmais si j'en ai plusieurs ca ne focntionne pas

    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
     
    do {
    fgets(line1,BUFFSIZE, theFile1);
    fgets(line2,BUFFSIZE, theFile2);
            while( line1[0]== '\n' || fgets(line1,BUFFSIZE, theFile1)!=NULL ){
                fgets(line1,BUFFSIZE, theFile1);
            }
            while( line2[0]=='\n' || fgets(line2,BUFFSIZE, theFile2)!=NULL ){
                fgets(line2,BUFFSIZE, theFile2);
            }
     
                //&& line2[0] != '\n' ) {    
     
                k++; 
                if(strcmp(line1, line2) != 0) {
                   if((theFile3 = fopen("outResult", "a")) == NULL) {
                        fprintf(stderr, "Error while opening outResult file \n");
                        return EXIT_FAILURE;
                    }
     
                    ret = traitement_line (line1, line2, thePrecision);
                    if( ret == 1) {
     
                        fprintf(theFile3, "%s(line %d):\t%s\n", inFileName1, k, line1);
                        printf("%s(line %d):\t%s\n", inFileName1, k, line1);
     
                        fprintf(theFile3, "%s(line %d):\t%s\n", inFileName2, k, line2);
                        printf("%s(line %d):\t%s\n", inFileName2, k, line2);
                    }
                } 
            line1[0]='\0';line2[0]='\0';
     
        }
        }
        while(!feof(theFile1) && !feof(theFile2));
        if (theFile1 != NULL) {
            fclose(theFile1);
        }
        if (theFile2 != NULL) {
            fclose(theFile2);
        }
        if (theFile3 != NULL) {
            fclose(theFile3);
        }
        return EXIT_SUCCESS;
    }

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 64
    Par défaut
    petite correction le code precedent ne fonctionne dans aucun cas

    le suivant fonctionne si une seule ligne blanche mais entre à la fin dans un boucle sans fin???
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    while( fgets(line1,BUFFSIZE, theFile1)!=NULL  && fgets(line2,BUFFSIZE, theFile2)!=NULL ){
           while( line1[0]=='\n' ){
                fgets(line1,BUFFSIZE, theFile1);
            }
            while( line2[0]=='\n' ){
                fgets(line2,BUFFSIZE, theFile2);
            }

  8. #8
    Expert confirmé

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Par défaut
    Citation Envoyé par Nalido
    petite correction le code precedent ne fonctionne dans aucun cas

    le suivant fonctionne si une seule ligne blanche mais entre à la fin dans un boucle sans fin???
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    while( fgets(line1,BUFFSIZE, theFile1)!=NULL  && fgets(line2,BUFFSIZE, theFile2)!=NULL ){
           while( line1[0]=='\n' ){
                fgets(line1,BUFFSIZE, theFile1);
            }
            while( line2[0]=='\n' ){
                fgets(line2,BUFFSIZE, theFile2);
            }
    Imagine qu'un de tes fgets internes arrive à la fin du fichier, que se passera-t-il?

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 64
    Par défaut
    j'ai trouvé merci de votre aide...

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

Discussions similaires

  1. detecter ligne Blanche
    Par Nalido dans le forum C
    Réponses: 4
    Dernier message: 16/05/2006, 18h18
  2. ligne blanche a l interieur d une requete
    Par tamerlan dans le forum Access
    Réponses: 1
    Dernier message: 07/04/2006, 11h28
  3. Réponses: 14
    Dernier message: 06/02/2006, 11h31
  4. ligne blanche sous une image dans un tableau
    Par spikelille dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 10/09/2005, 18h24
  5. Éliminer les lignes blanches dans un tableau
    Par DenPro dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 18/11/2004, 01h27

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