Bonjour,
Cela fait quelques jours que je bloque sur un problème. J'ai beau le triturer dans tout les sens, quitte à sacrifier toute performance, toujours rien. Le but: Creer un programme me permettant de comparer le contenu d'un fichier csv avec celui d'un autre fichier. En algo, j'ai donc retenu:
Pour chaque ligne de fichier1 je vais la comparer à toutes les lignes de fichier2. La comparaison ligne a ligne est exclu car les enregistrements ne sont pas forcément dans le même ordre (une des erreurs habituelles est la disparition d'une ligne ce qui engendre un décalage sur tout le reste du fichier).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 Ouverture fichier1 Ouverture fichier2 Tant que fin fichier1 non atteint{ Recuperez ligne courante Tant que fin fichier2 non atteint{ Recuperez ligne courante ... ... ... traitements et tests entre ligne fichier1 et fichier2 ... } } Fermeture fichier1 Fermeture fichier2
Pour l'instant, je cherche juste un code qui enregistre dans un fichier la premiere ligne du fichier1 puis la premiere ligne du fichier2 puis la deuxieme ligne du fichier1... Mes fonctions de tests sont déjà prêtes et fonctionnelles.
Au niveau du code j'ai:
Le soucis avec ce code, c'est que chaine1 ne prend que la valeur de la ligne 1. J'ai vérifié le curseur avec ftell() et en effet, le curseur reste planté sur 0 pour fichier1. J'ai tenté de contourner le problème en faisant un parcours total de fichier 1 et en enregistrant la position de chaque début de ligne. Puis je calculais l'ecart entre chacune des valeurs et finalement j'utilisais fseek(fichier,différence entre la position de la prochaine ligne - et celle du début de la ligne courante, position du curseur). La, je suis tombé dans le maraboutisme aigue. Mon tableau qui avait les curseurs en mémoire était bien remplis puis dès que j'utilisais un fgets/fseek, toutes les valeurs du tableau passent à 0... J'ai pas pris de drogue, j'ai rien bu, rien fumer.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 import1 = fopen("resultats1.txt", "r"); import2 = fopen("resultats2.txt", "r"); export1 = fopen("resultats3.txt", "a+"); while (!feof(import1)){ fgets(chaine1, 256, import1); while(!feof(import2){ fgets(chaine2, 256, import2); fputs(chaine1,export1); fputs(chaine2,export1); } }
Structure des fichiers
1111;2222;3333
aaa;bbb;ccc
77777;66666;55555;
Mon avis/intuition/mes pistes: fgets utilisé dans une double boucle déplace toujours le curseur en début de fichier et par je ne sais quelle magie, efface le tableau où j'ai stocké les curseurs. Sinon, un problème de EoF ou alors, c'est une mauaise idée d'imbriquer des parcours de fichiers, le systeme confond tout les curseurs, pointeurs, EoF...
Merci de votre aide, si jamais je n'ai pas été assez précis, je suis à l'écoute pour compléter.
Partager