Modifier un mot dans un fichier

krusty24 Messages postés 19 Date d'inscription vendredi 15 septembre 2006 Statut Membre Dernière intervention 15 novembre 2011 - 10 mai 2007 à 16:28
cs_laurent1024 Messages postés 987 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 30 août 2012 - 10 mai 2007 à 18:49
bonjour tout le monde

le but de mon programme est de modifier un mot dans un fichier.

exemple de fichier:
2,3  4,5 6.7  8,9
1.3 2,4  5.7 6,8

par exemple je souhaite remplacer "2,3" par "yep"

voici le code:
int main ()
{   
    FILE *falire, *fcorr; // descripteur de fichier                
    unsigned char cach, cmod, tmp;//pour changer un caractere
    int i=0, j=0, k, espace=0, lgTab, nbBlanc, opt, comp;
    char *nomFic="", *nomFic_corr="";//nom des fichiers
    char *tabCh, *tabRes;//passer des tabulation au espace (et reciproquement)
    char *wach, *wmod, *temp; //pour changer un mot

printf("\nenter the name of the input file (with extension):");
    nomFic=malloc(256*sizeof(char));
    scanf("%s",nomFic);
    falire=fopen(nomFic,"r");
    if (falire==NULL)
    {
        printf("error %s: file not found\n",nomFic);
        system("PAUSE");
        exit(0);
    }
   
    printf("enter the name to create the output file: ");
    nomFic_corr=malloc(256*sizeof(char));
    scanf("%s",nomFic_corr);   
    //ouverture du fichier de sortie
    fcorr=fopen(nomFic_corr,"w");
    if (fcorr==NULL)
    {
        printf("\nerror: cannot create the result file\n");
        system("PAUSE");
        exit(0);
    }
//quelle mot modifier par lequel?
             printf("Which word do you want to change?\n");
            fflush(stdin);
            wach=malloc(256*sizeof(char));
            scanf("%s",wach);  
            fflush(stdin);   
            printf("By which word?\n");
            wmod=malloc(256*sizeof(char));
            scanf("%s",wmod);
           
            //modification des données du fichier
            temp=malloc(256*sizeof(char));
            while (fscanf(falire,"%s",temp)!=EOF)
            {
                comp=strcmp(temp,wach); 
                if (comp==0)
                {
                    fprintf(fcorr,"%s ",wmod);
                }
                else
                {
                    fprintf(fcorr,"%s ",temp);
                }
            }
}

le resultat de cette aplication est le suivant:
yep 4,5 6.7 8,9 1.3 2,4 5.7 6,8

or ce n'est pas exactement se que j'attend car les espace ainsi que les retour a la ligne ne sont pas respecté. Mon probleme est que le fichier d'entré n'a pas un format précis.

voila mon probleme

je remercie d'avance toute personne essayant de m'aider

5 réponses

cs_laurent1024 Messages postés 987 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 30 août 2012 25
10 mai 2007 à 16:34
je crois que le fscan ca bouffe le \n de la fin. Soit tu dois faire un tableau avec un case de plus que ce que tu lit et tu le rajoute a la fin, soit utlise la fonction read
++
0
krusty24 Messages postés 19 Date d'inscription vendredi 15 septembre 2006 Statut Membre Dernière intervention 15 novembre 2011
10 mai 2007 à 16:40
decidement laurent tu es partout lol

si j'ai bien compris tu me conseil de faire un tableau de chaine de caractere ou pas ??

pour ce qui est de la fonction read, elle peut s'apliquer sur mon exemple, mais je ne sachant pas vraiment la taille des elements du fichier je ne pense pas que se soit possible.

merci encore un fois
0
cs_laurent1024 Messages postés 987 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 30 août 2012 25
10 mai 2007 à 16:44
le plus simple c'est de remplacer ton   fprintf(fcorr,"%s ", ... ) par   fprintf(fcorr,"%s\n",

par contre je sais pas si ca va marcher a tout le coup.
Pour la fonction read = tu lui demande de lui x octets et elle le met dans le buffer que tu lui passe.
en retour elle te renvoit le nombre qu'alle a réellement lu.  quand elle te renvoit moinsque ce qu'elle devrait c'est que c'etait le dernier morceau.
++
0
krusty24 Messages postés 19 Date d'inscription vendredi 15 septembre 2006 Statut Membre Dernière intervention 15 novembre 2011
10 mai 2007 à 16:50
le probleme, si j'utilise fprintf(fcorr,"%s\n", je vais me retrouver avec un fichier qui ressemblerai a sa
yep
4,5
6.7
8,9
1.3
2,4
5.7
6,8

or sa ne me convient pas non plus (tu va surement penser quelle relou celui la )

et pour se qui est du read si je lui met 3 il va me sortir par exemple 4,5
mais si je me retrouve avec des valeur tel que 3,4583928, sa ne marche plus

je suis vraiment coincer dans la semoule epaisse lol
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_laurent1024 Messages postés 987 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 30 août 2012 25
10 mai 2007 à 18:49
ce que tu peut faire : tu lis une ligne avec fgets (http://www.cplusplus.com/reference/clibrary/cstdio/fgets.html)
apres tu parcours la chaine que tu as trouvé et tu la découpe en prennant les espaces et les tabulations comme caracteres de séparation.
tu compares chaque morceau de chaine avec ta chaine que tu veux remplacer.
et apres tu réécris la ligne (modifié ou non) dans ton fichier de sortie

++
0
Rejoignez-nous