Comparer une ligne d'un fichier avec la précédente

boudafc Messages postés 48 Date d'inscription mercredi 27 avril 2005 Statut Membre Dernière intervention 18 juillet 2008 - 16 juin 2005 à 11:21
boudafc Messages postés 48 Date d'inscription mercredi 27 avril 2005 Statut Membre Dernière intervention 18 juillet 2008 - 16 juin 2005 à 14:05
Voilà, j'ai un fichier où toutes les lignes sont en double.

Ce que je voulais faire, c'est comparer une ligne par rapport à la précédente, mais voilà, ça foire ! et je comprend pas trop pourquoi ! lorsque je fais le mode débuggage, à un moment, dans ma variable buffer, il change le '\n' par un '0' et donc à chaque fois ça trouve que la ligne est différente ....

fichiers texte (test.log) :

Hello
Hello
Coucou
Coucou

source:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>



int main()
{
FILE *fichier; /* Déclaration des */
FILE *sortie; /* flux* */

/* Ouverture des fichiers en lecture ou écriture */
fichier = fopen("test.log","r");

if (fichier == NULL)
{
printf("Erreur d'ouverture du fichier");
exit(-1);
}


sortie = fopen("traite.txt", "w");
if (sortie == NULL)
{
printf("Erreur de création du fichier");
exit(-1);
}
/* Fermeture des fichiers en lecture ou écriture */


char temp[1000];
char buffer[1000];

memset(buffer,'.',1000);
do
{
strcpy(temp,buffer);
fgets(buffer,255,fichier);
if (strcmp(buffer, temp) != 0)
{
fprintf(sortie,"%s\n", buffer);
}
strcpy(temp, buffer);
}while(!feof(fichier));


fclose(sortie);
fclose(fichier);

}

si quelqu'un peut m'aider, parce que je desespère ....

Merci

8 réponses

luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
16 juin 2005 à 11:42
Pourquoi te fais tu **&é' avec des char ? Il serait tellement plus simple d'utiliser

#include <fstream>



et manipuler des string.



Pour ton problème j'y connais rien à cette librairie. Elle est trop compliqué pour moi à manipuler :)
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
16 juin 2005 à 11:59
Remarque TRES utile vraiment, si le C est trop difficile, il peut aussi le faire en VB.

ciao...
BruNews, MVP VC++
0
boudafc Messages postés 48 Date d'inscription mercredi 27 avril 2005 Statut Membre Dernière intervention 18 juillet 2008
16 juin 2005 à 12:01
:| c'est une blague non ? loll
0
boudafc Messages postés 48 Date d'inscription mercredi 27 avril 2005 Statut Membre Dernière intervention 18 juillet 2008
16 juin 2005 à 12:03
là, j'ai isolé mon pb (je précise) .. il s'agit d'un fichier log à la base où les lignes contiennent IP-Login-Date-Chemin ... qui subissent ensuite des traitements pour ensuite sortir des statistiques ...

J'ai simplifié, le code pour mettre juste le truc qui foire ....

Merci pour votre aide !
0

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

Posez votre question
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
16 juin 2005 à 12:05
BruNews pourquoi aller utiliser des outiles qui sont sources de
plantages alors que le C++ offrent des moyens beaucoup plus simple et
sur ?
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
16 juin 2005 à 12:09
parce que visiblement il en est à l'apprentissage, s'il n'apprend jamais à manier buffers et pointers, quel statut espérer plus tard dans le monde professionnel ?

ciao...
BruNews, MVP VC++
0
cs_Matt67 Messages postés 549 Date d'inscription samedi 6 septembre 2003 Statut Membre Dernière intervention 6 mars 2010 3
16 juin 2005 à 12:51
Bonjour,



Initialise ton buffer avec \0
memset(buffer, 0, 1000);

dans ton fichier log, la derniere ligne ne contient sur pas de retour chariot...



Matt...
0
boudafc Messages postés 48 Date d'inscription mercredi 27 avril 2005 Statut Membre Dernière intervention 18 juillet 2008
16 juin 2005 à 14:05
Alors voilà, je m'en suis sorti comme ça ... :

#include <stdio.h>
#include <stdlib.h>
#include <string.h>



int main()
{
FILE *fichier; /* Déclaration des */
FILE *sortie; /* flux* */

/* Ouverture des fichiers en lecture ou écriture */
fichier = fopen("test.log","r");

if (fichier == NULL)
{
printf("Erreur d'ouverture du fichier");
exit(-1);
}


sortie = fopen("traite.txt", "w");
if (sortie == NULL)
{
printf("Erreur de création du fichier");
exit(-1);
}
/* Fermeture des fichiers en lecture ou écriture */


char temp[1000];
char buffer[1000];

memset(buffer,0,1000);
do
{
strcpy(temp,buffer);
fgets(buffer,255,fichier);
if(buffer[strlen(buffer) - 1] == '\n')
buffer[strlen(buffer) - 1] = 0;
if (strcmp(buffer, temp) != 0)
{
fprintf(sortie,"%s\n", buffer);
}
}while(!feof(fichier));


fclose(sortie);
fclose(fichier);


}

je sais pas si c'est très très correct mais ça marche loll ....
0
Rejoignez-nous