krusty24
Messages postés19Date d'inscriptionvendredi 15 septembre 2006StatutMembreDernière intervention15 novembre 2011
-
10 mai 2007 à 16:28
cs_laurent1024
Messages postés987Date d'inscriptionmardi 31 mai 2005StatutMembreDernière intervention30 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
cs_laurent1024
Messages postés987Date d'inscriptionmardi 31 mai 2005StatutMembreDernière intervention30 août 201225 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
++
krusty24
Messages postés19Date d'inscriptionvendredi 15 septembre 2006StatutMembreDernière intervention15 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.
cs_laurent1024
Messages postés987Date d'inscriptionmardi 31 mai 2005StatutMembreDernière intervention30 août 201225 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.
++
cs_laurent1024
Messages postés987Date d'inscriptionmardi 31 mai 2005StatutMembreDernière intervention30 août 201225 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