Pti souci en c sur un prog

niki -  
 marvinrouge -
g un programme qui prend en entrée un fichier txt contenant des mots
ex:fichier.txt=

coucou la musique va bien
on est au mois d'aout

mon prog va lire l'ensemble de ces mots et les récrire dans un fichier txt du type:

# Mise a jour 04/08/2004
# revision 40
# programme lire.exe

# ------------------------------------------------------------------------------
# Analyse du corps du message
# ------------------------------------------------------------------------------

body GPN40 /\b(?:coucou|la|musique|va|bien|on|est|au|mois|d'aout|d'aout)\b/i
describe GPN40 mots repérés par le logiciel GPN
score GPN40 3

pouvez vous m'expliquer pourquoi dans ce fichier le dernier mot du fichier d'entree qui est "d'aout" ce retrouve 2 fois dans mon fichier de sortie et comment faire pour l'éviter, voici mon prog:

#include <stdio.h>

int i;
char chaine[20];

int main(void)
{
FILE *filer;
FILE *filew;
FILE *fileno;

fileno = fopen("no.txt","r+"); //fichier mémorisant le numéro de révision
filew = fopen("resultat.cf","wt"); //fichier de sortie
if((filer = fopen("fichier.txt", "r")) != NULL) //on ouvre le fichier d'entree et verifie si on y arrive
{

fprintf(filew,"# Mise a jour 04/08/2004\n");
fprintf(filew,"# revision ");
fscanf(fileno,"%d",&i);
i++;
rewind(fileno);
fprintf(fileno,"%d",i);
fclose(fileno);
fprintf(filew,"%d",i);
fprintf(filew,"\n");
fprintf(filew,"# programme lire.exe\n");
fprintf(filew,"\n");
fprintf(filew,"# ------------------------------------------------------------------------------\n");
fprintf(filew,"# Analyse du corps du message\n");
fprintf(filew,"# ------------------------------------------------------------------------------\n");
fprintf(filew,"\n");
fprintf(filew,"body GPN");
fprintf(filew,"%d",i);
fprintf(filew,"\t\t/\\b(?:");

fscanf(filer,"%s",&chaine);
fprintf(filew,"%s",chaine);

while (!feof(filer))
{

fprintf(filew,"|");
fscanf(filer,"%s",&chaine);
fprintf(filew,"%s",chaine);

}

fprintf(filew,")\\b/i\n");
fprintf(filew,"describe GPN");
fprintf(filew,"%d",i);
fprintf(filew,"\tmots repérés par le logiciel GPN\n");
fprintf(filew,"score GPN");
fprintf(filew,"%d",i);
fprintf(filew,"\t\t3\n");

}
fclose(filer);
fclose(filew);
}

3 réponses

  1. curiousest_intruder
     
    Hello !

    Retente avec la boucle suivante :

    while (!feof(filer))
    {

    fprintf(filew,"|");
    if (fscanf(filer,"%s",&chaine))
    fprintf(filew,"%s",chaine);
    }
    0
  2. curiousest_intruder
     
    Ou mieux :

    while (!feof(filer))
    {
    if (fscanf(filer,"%s",&chaine))
    fprintf(filew,"|%s",chaine);
    }
    0
  3. marvinrouge
     
    Bonne habitude à prendre
    str est une chaine
    fic un fichier

    int ligne = 0; // COMPTEUR DE LIGNES

    while (!feof(fic)) // TANT QU'ON EST PAS A LA FIN DU FICHIER
    {
    ligne++;

    str[0] = '\0'; // ON 'NETTOYE' LA VARIABLE str CAR ELLE SERT EN BOUCLE (while) ET PEUIT DONC CONTENIR D'UN COUP SUR L'AUTRE DE 'VEILLES' DONNEES

    fscanf(fic, "%s", str); // ON TENTE DE LIRE UNE LIGNE

    if (str[0]!='\0') // SI ON A LU QUELQUE CHOSE
    {
    printf("en ligne %i on a lu %s\n", ligne, str); // ON L'AFFICHE (PAR EXEMPLE)
    }

    }

    voilà voilà !

    marvinrouge
    0