cs_riep
Messages postés7Date d'inscriptionjeudi 23 juin 2005StatutMembreDernière intervention24 juin 2005
-
23 juin 2005 à 10:48
darfeuille
Messages postés63Date d'inscriptionvendredi 14 mai 2004StatutMembreDernière intervention25 juillet 2005
-
24 juin 2005 à 10:17
bonjour
j'ai un petit problème avec fwrite, en fait je voudrais tout simplement
recopier les données d'un fichier 1 dans un fichier 2 seulement si ces
données n'existent pas dans fichier2
voici le code que j'ai pondu:
int main()
{
int value,taille;
FILE *fp;
FILE *fp1;
char *test;
char command[100];
test = (char*)malloc(sizeof(char));
fp = fopen("fichier1","r");
fp1 = fopen("fichier2","a");
while(!feof(fp))
{
fgets(test,10,fp);
taille = ftell(fp);
sprintf(command,"grep "%s" fichier1", test);
if(system(command))
{
fwrite(test,sizeof(char),taille,fp1);
}
}
fclose(fp);
fclose(fp1);
return 0;
}
-voici le contenu du fichier1 :
salut
hello
bonjour
-le fichier fichier2 est vide au début
et voila ce que j'obtiens, dans test1.txt, lorsque je lance le programme:
salut
hello^@^@^@ibonjour
je ne sais pas pourquoi il apparait ces caractères en plus.
Autre problème ne connaissant pas à l'avance la taille d'une ligne du
fichier1, je voulais mettre une valeur élévée (1000) pour fgets mais
ceci me génère un segmentation fault.
darfeuille
Messages postés63Date d'inscriptionvendredi 14 mai 2004StatutMembreDernière intervention25 juillet 2005 23 juin 2005 à 11:21
ton grep, tu ne devrais pas plutot le faire sur "fichier2"?
sprintf(command,"grep "%s" fichier1", test) -> sprintf(command,"grep "%s" fichier2", test);
et aussi :
test = (char*)malloc(sizeof(char));
en faisant ca, si je ne dis pas de betise, tu alloue un seul caractere non?
tu devrais plutôt faire test = (char*)malloc(100 * sizeof(char))
cs_riep
Messages postés7Date d'inscriptionjeudi 23 juin 2005StatutMembreDernière intervention24 juin 2005 23 juin 2005 à 11:26
par contre j'ai un autre problème maintenant, j'ai bien toute les
informations ds fichier2 mais elles sont toutes attachées, il n'y a pas
de saut de ligne
cs_riep
Messages postés7Date d'inscriptionjeudi 23 juin 2005StatutMembreDernière intervention24 juin 2005 23 juin 2005 à 15:28
autre pb (décidement) j'arrive le programme fonctionne bien lorsque le
fichier 2 est vide mais si jamais le fichier2 contient qqchose, le
programme ne rajoute qu'une seule ligne au fichier 2 (malgré qu'il y
est plusierus ligne ds fichier1 qui ne soient pas ds fichier2);
cs_riep
Messages postés7Date d'inscriptionjeudi 23 juin 2005StatutMembreDernière intervention24 juin 2005 23 juin 2005 à 16:08
j'ai essayé mais ca marche nikel qd le fichier 2 est vide mais qd il
contient déjà qqchose il prend une ligne au "pif" ds fichier 1 et le
balance ds fichier2
darfeuille
Messages postés63Date d'inscriptionvendredi 14 mai 2004StatutMembreDernière intervention25 juillet 2005 24 juin 2005 à 10:17
C'est normal, c'est parce que quand il lit ton fichier, il lit les \n de passage a la ligne, et les enregistre
Tu as trois solutions :
1/ tu lis ligne par ligne ton fichier1, en eliminant le \n
2/ plutôt q'utiliser une commande système, tu recherche directement
dans ton programme (par exemple en lisant tout d'abord ton fichier2, et
en enregistrant dans un tableau les lignes lues, puis en cherchant dans
celles-ci)
3/ Tu te mets au C++ et aux flux, qui te simplifieront la vie.
A toi de voir, tu as plein d'autres solutions encore
Mias pour ma part, je n'utiliserais pas grep, parce que :
1/ ce n'est pas portable
2/ C'est brutal comme truc, t'auras du mal a faire evoluer ton programme par la suite
Je pense que le mieux serait la solution 2 (sauf si tu veux te mettre au C++)