Comparer 2 fichiers [C++] - C++ - Programmation
Marsh Posté le 15-04-2002 à 01:54:16
buf_org et buf_numd sont définis comme des tableaux de char, donc des pointeurs.
Donc, le 'if (buf_org != buf_numd)' compare 2 adresses, qui sont forcément différentes.
Il faudrait comparer le contenu de ces 2 tableaux.
Marsh Posté le 15-04-2002 à 09:53:50
bjbebert a écrit a écrit : buf_org et buf_numd sont définis comme des tableaux de char, donc des pointeurs. Donc, le 'if (buf_org != buf_numd)' compare 2 adresses, qui sont forcément différentes. Il faudrait comparer le contenu de ces 2 tableaux. |
oky merci beaucoup, je suis cette piste !!!
@++
Marsh Posté le 15-04-2002 à 10:00:41
compare le contenu des 2 buffers avec strcmp, ca devrait suffire je pense.
Marsh Posté le 15-04-2002 à 19:13:16
KarLKoX a écrit a écrit : compare le contenu des 2 buffers avec strcmp, ca devrait suffire je pense. |
salut, j'ai fait if (buf_org[0] != buf_numd[0])
ça marche, masi je suis trop con j'ai pas pensé à strcmp()...
merci à vous 2
Marsh Posté le 16-04-2002 à 18:17:14
Tu dis que tu veux comparer 2 fichiers quelconques. Or, strcmp compare des chaines de caractères (terminées par un 0).
Comment tu fais si ton fichier contient un octet à 0, ou que tes buffer de 255 octets ne se terminent pas par un 0
J'ai l'impression qu'il faudrait plutot utiliser des buffers de type void *, et comparer 'à la main' (une boucle).
Edit : le 'if (buf_org[0] != buf_numd[0])', il ne compare que le premier octet de chaque buffer, pas l'ensemble.
[jfdsdjhfuetppo]--Message édité par bjbebert--[/jfdsdjhfuetppo]
Marsh Posté le 16-04-2002 à 18:31:36
bjbebert a écrit a écrit : J'ai l'impression qu'il faudrait plutot utiliser des buffers de type void *, et comparer 'à la main' (une boucle). |
ou mieux, utiliser memcmp() au lieu de roue_version_447875454().
Marsh Posté le 16-04-2002 à 19:49:29
youdontcare a écrit a écrit : ou mieux, utiliser memcmp() au lieu de roue_version_447875454(). |
Oui, on peut aussi
Marsh Posté le 16-04-2002 à 22:09:30
youdontcare a écrit a écrit : ou mieux, utiliser memcmp() au lieu de roue_version_447875454(). |
Non, on utilise std::mismatch car on fait du c++ de haut vol :-)
Marsh Posté le 16-04-2002 à 22:14:44
kenshiro182 a écrit a écrit : Non, on utilise std::mismatch car on fait du c++ de haut vol :-) |
Nan mais ca va la tete
Marsh Posté le 16-04-2002 à 22:40:45
bjbebert a écrit a écrit : Nan mais ca va la tete |
Attends, j'appelle Bjarne :-)
Bjarne, vient m'aiderrrrr !!!
Marsh Posté le 15-04-2002 à 00:20:06
Bonjour,
j'aimerais pouvoir comparer 2 fichiers texte, plus globalement 2 fichiers, voire les différences à l'octet prêt.
Voici ce que j'ai tapé :
[code]
OpenDialog1->InitialDir = "C:\\";
OpenDialog1->Title = "Exécutable texte original";
if (OpenDialog1->Execute())
{
AnsiString fich_org = OpenDialog1->FileName;
FILE *fichier_org;
bool fichier_org_ouvert = false;
char buf_org[255];
OpenDialog1->InitialDir = "C:\\";
OpenDialog1->Title = "Exécutable texte #2";
if (OpenDialog1->Execute())
{
AnsiString fich_numd = OpenDialog1->FileName;
FILE *fichier_numd;
bool fichier_numd_ouvert = false;
char buf_numd[255];
if ((fichier_org = fopen(fich_org.c_str(), "rb" )) == NULL)
ShowMessage("Impossible d'ouvrir le fichier " + ExtractFileName(fich_org));
else
fichier_org_ouvert = true;
if ((fichier_numd = fopen(fich_numd.c_str(), "rb" )) == NULL)
ShowMessage("Impossible d'ouvrir le fichier " + ExtractFileName(fich_numd));
else
fichier_numd_ouvert = true;
if (fichier_org_ouvert && fichier_numd_ouvert)
{
int i=0;
while (! feof(fichier_org))
{
fseek(fichier_org, i, SEEK_SET);
fread(buf_org, 1, 1, fichier_org);
fseek(fichier_numd, i, SEEK_SET);
fread(buf_numd, 1, 1, fichier_numd);
if (buf_org != buf_numd)
{
Memo2->Lines->Add(buf_numd); //affiche les !=
}
i++;
}
}
fclose(fichier_org);
fclose(fichier_numd);
StatusBar1->Panels->Items[0]->Text = buf_org[30] + buf_numd[30];
}
}
mais mon Memo2 contient
uô
êô
sô
ô
ô
ô
(ô
Pô
oô
rô
tô
uô
gô
uô
eô
sô
eô
)ô
ô etc.......
même quand mes 2 fichiers texte sont identiques !!!
Où ai-je fait l'erreur à votre avis ?
N'oubliez pas que je voudrait comparer tout types de fichiers, à l'octet prêt ...
merci d'avance
---------------
Visitez mon site : http://www.jujubarbare.linux-fan.com