J'y arrive pas et ca m'enerve

cs_nach73 Messages postés 34 Date d'inscription dimanche 24 avril 2005 Statut Membre Dernière intervention 18 mai 2005 - 18 mai 2005 à 22:54
cs_qsdfgh Messages postés 29 Date d'inscription jeudi 19 décembre 2002 Statut Membre Dernière intervention 30 mars 2006 - 22 nov. 2005 à 12:56
j'ai un probleme que je dois resoudre pour demain.
Je dois remplacer un mots dans un fichier
ma fonction qui effectue cela se plante royalement
Rem:la fonction PremCarPos renvoye la position
du mot a remplace
fd
fichier ou on cherche le mot
ftmp fichier ou on ecrit

void ModificationFichier (char *ch1,char *ch2,FILE *fd,FILE *ftmp)
{
int Lch2,Lch1;
long Depart=0,pos=0,pos1=0;
char *memoir;
memoir=(char*)malloc(TAILLE);
Lch1=strlen(ch1);
Lch2=strlen(ch2);
pos=PremCarPos(ch1,fd,Depart);
fseek(fd,0L,SEEK_SET);
fread(memoir,sizeof(char),pos,fd);
fwrite(memoir,sizeof(char),pos,ftmp);
fwrite(ch2,sizeof(char),Lch2,ftmp);
while (!feof(fd))
{
pos=pos+Lch1;
pos1=PremCarPos(ch1,fd,pos);
pos=pos1;
fseek(fd,pos,SEEK_SET);
fread(memoir,1,pos,fd);
fwrite(memoir,1,pos,ftmp);
}

return ;
}

2 réponses

ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
19 mai 2005 à 09:31
#include <stdio.h>
#include <stdlib.h>
#include <string.h>


int main(int argc, char* argv[])
{
FILE* fsrc;
FILE* fdst;
char* szfind;
char* szreplace;
char* buf;
char* p1;
char* p2;
int len;
int lenfind;
int lenreplace;


// ouverture fichier source et destination (en binaire pour éviter la transformation des \r\n)
fsrc = fopen(argv[1], "rb");
fdst = fopen(argv[2], "wb");
szfind = argv[3];
szreplace = argv[4];
lenfind = strlen(szfind);
lenreplace = strlen(szreplace);


// taille fichier source
fseek(fsrc, 0, SEEK_END);
len = ftell(fsrc);
fseek(fsrc, 0, SEEK_SET);


// lecture fichier source
buf = malloc(len+1);
fread(buf, 1, len, fsrc);
buf[len] = '\0';

// boucle de recherche
p1 = buf;
while((p2 = strstr(p1, szfind)) != NULL)
{
// écriture du texte situé entre p1 et p2
fwrite(p1, 1, p2-p1, fdst);


// remplacement du texte
fwrite(szreplace, 1, lenreplace, fdst);


// on se déplace à la fin du texte trouvé
p1 = p2+lenfind;
}


// on recopie la fin du fichier (de p1 à buf+len)
if(buf+len-p1 > 0)
fwrite(p1, 1, buf+len-p1, fdst);


// fermeture fichiers, libération mémoire
fclose(fsrc);
fclose(fdst);
free(buf);
return 0;
}
0
cs_qsdfgh Messages postés 29 Date d'inscription jeudi 19 décembre 2002 Statut Membre Dernière intervention 30 mars 2006
22 nov. 2005 à 12:56
nb,b,nosé
0
Rejoignez-nous