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);
}
A voir également:

3 réponses

curiousest_intruder
 
Hello !

Retente avec la boucle suivante :

while (!feof(filer))
{

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

while (!feof(filer))
{
if (fscanf(filer,"%s",&chaine))
fprintf(filew,"|%s",chaine);
}
0
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