Bonjour,

Bonjour à toutes et a tous.

Voilà mon soucis:

J'ai codé un programme qui a pour but d'ouvrir deux fichiers et de lire leur contenu.
Une fois lu, il compare le contenu des deux fichiers et renvois les lignes présentes dans le fichier 1 mais pas dans le fichier 2 et vice versa.

Mon problème est qu'après avoir lu et affiché les fichier 1 et 2, il les relit et affiche la dernière ligne mais sans la première partie de la ligne.

Voici le resultat de la lecture des fichiers, après l'éxécution du programme:
http://www.casimages.com/img.php?i=0...2025747507.jpg


Voici mon code; j'ai essayé de faire des commentaires aussi précis que possible.

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
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
 
// Comparaison fichiers.cpp*: définit le point d'entrée pour l'application console.
//
 
/////////////////////
/// Bibliothèques ///
/////////////////////
 
#include <stdafx.h>
#include <string>
#include <fstream>
#include <iostream>
#include <sstream>
#include <cassert>
#include <vector>
#include <algorithm>
#include <conio.h>
 
using namespace std;
 
 
////////////////////////////////
/// Déclaration de Variables ///
////////////////////////////////
 
#define NBRE_COL 8
 
int compteur = 0;
 
///////////////////////////////////
/// Déclaration de structure(s) ///
///////////////////////////////////
 
typedef struct structure
{
	string col[8];
	bool structure::operator == ( const structure& cols ) const;
};
 
 
//////////////////////////////
/// Prototype de Fonctions ///
//////////////////////////////
 
ostream& operator << ( ostream& out, structure colonne_var );
void recup_ligne( ifstream& fichier, structure &colonne_var );
void affich_Tab( vector < structure > tableau );
int compare( vector < structure > Tab1, vector < structure > Tab2 );
 
 
///////////////////////////
/// Programme Principal ///
///////////////////////////
 
int _tmain(int argc, _TCHAR* argv[])
{
	/* Ouverture des fichiers en lecture */
 
	ifstream fichier1L( "C:\\Documents and Settings\\bastien\\Bureau\\Offres - Tables EDI Excel\\20090727-TABLES_EDI_petit.csv" );
	if( fichier1L.is_open( ) == false )
	{
		cout << "ERREUR LORS DE L'OUVERTURE DU FICHIER 20090727-TABLES_EDI_petit.csv" << endl;
		assert( false );
		return -1;
	}
 
	ifstream fichier2L( "C:\\Documents and Settings\\bastien\\Bureau\\Offres - Tables EDI Excel\\20090731-TABLES_EDI_petit.csv" );
	if ( fichier2L.is_open( ) == false )
	{
		cout << "ERREUR LORS DE L'OUVERTURE DU FICHIER 20090731-TABLES_EDI_petit.csv" << endl;
		assert( false );
		return -1;
	}
 
	/* Ouverture des fichiers en écriture */
 
	ofstream fichier1E( "C:\\Documents and Settings\\bastien\\Bureau\\Ecriture de 20090727-TABLES_EDI.txt" );
	if ( fichier1E.is_open( ) == false )
	{
		cout << "ERREUR LORS DE L'OUVERTURE DU FICHIER Ecriture de 20090727-TABLES_EDI.txt" << endl;
		assert( false );
		return -1;
	}
 
	ofstream fichier2E( "C:\\Documents and Settings\\bastien\\Bureau\\Ecriture de 20090731-TABLES_EDI.txt" );
	if ( fichier2E.is_open( ) == false )
	{
		cout << "ERREUR LORS DE L'OUVERTURE DU FICHIER Ecriture de 20090731-TABLES_EDI.txt" << endl;
		assert( false );
		return -1;
	}
 
 
	// Pour lire les lignes du fichier1L et les afficher:
 
	string ligne;
	structure colonne_var;				// Création d'une variable "colonne_var" de type "Colonne_struct".
	vector < structure > MonTableau1;	// Création d'un tableau contenant n structures.
 
	while ( fichier1L.eof( ) == false )
	{
		recup_ligne( fichier1L, colonne_var );	// Récupère les lignes du premier fichier
		cout << colonne_var.col[0] << "\t" << colonne_var.col[3] << endl;	// Affiche la première et 4ème colonne du premier fichier
 
		MonTableau1.push_back( colonne_var );	// Insère les lignes lues du premier fichier dans MonTableau1
		fichier1E << colonne_var.col[0] << "\t" << colonne_var.col[3] << endl;	// Ecrit la première et 4ème colonne de MonTableau1 dans un fichier .txt
	}
 
 
	// Pour lire les lignes du fichier2L et les affciher:
 
	string ligne1;
	vector < structure > MonTableau2;
 
	while ( fichier2L.eof( ) == false )
	{
		recup_ligne( fichier2L, colonne_var );	// Récupère les lignes du second fichier
		cout << colonne_var.col[0] << "\t" << colonne_var.col[3] << endl;	// Récupère les lignes du second fichier
 
		MonTableau2.push_back( colonne_var );	// Insère les lignes lues du second fichier dans MonTableau2
		fichier2E << colonne_var.col[0] << "\t" << colonne_var.col[3] << endl;	// Ecrit la première et 4ème colonne dans un second fichier .txt
	}
 
	cout << endl << endl;
 
	// Affichage du tableau pour le fichier1L
	affich_Tab( MonTableau1 );
 
	// Affichage du tableau pour le fichier2L
	affich_Tab( MonTableau2 );
 
	cout << endl << endl;
 
 
	//COMPARAISON FICHIER 1 AU FICHIER 2
	compare( MonTableau1, MonTableau2 );
	cout << "Ligne(s) presente(s) dans le fichier 1 et non presente(s) dans le fichier 2: " << endl << compteur << " ligne(s)" << endl;
 
	cout << endl << endl;
 
	//COMPARAISON FICHIER 2 AU FICHIER 1
	compare( MonTableau2, MonTableau1 );
	cout << "Ligne(s) presente(s) dans le fichier 2 et non presente(s) dans le fichier 1: " << endl  << compteur << " ligne(s)"  << endl << endl;
 
 
	fichier1L.close();
	fichier2L.close();	/**************************/
	fichier1E.close();	/* fermeture des fichiers */	
	fichier2E.close();	/**************************/
 
	cout << endl << "Appuyer sur une touche" << endl;
	getch( );
 
	return 0;
}
 
 
////////////////////////////////
/// Déclaration de Fonctions ///
////////////////////////////////
 
/* Fonction pour récupérer les lignes d'un fichier */
void recup_ligne( ifstream &fichier, structure &variable )
{
	for ( int i = 0; i < 6; ++i )
	{
		getline( fichier, variable.col[i], ';' );
	}
	getline( fichier, variable.col[6], ';' );
	getline( fichier, variable.col[7] );
}
 
/* Fonction pour afficher le contenu d'un tableau */
void affich_Tab( vector < structure > tableau )
{
	for ( unsigned int i = 0; i < tableau.size( ) ; ++i )
	{
		cout << tableau[i];
	}
	cout << endl;
}	
 
/* Fonction pour déclarer un opérateur == */
bool structure::operator == (const structure & cols) const
{
	for ( int i = 0; i < NBRE_COL; ++i)
	{
		if ( col[i] != cols.col[i] )
				return false;
	}
		return true;
}
 
/* Fonction pour déclarer un opérateur << */
ostream& operator << ( ostream& out, structure colonne_var )
{
	for ( int i = 0; i < NBRE_COL; ++i )
	{
		out << colonne_var.col[i] << " ";
	}
	out << endl;
	return out;
}
 
/* Fonction pour comparer le contenu des deux tableaux */
int compare( vector < structure > Tab1, vector < structure > Tab2 )
{
	compteur = 0;
 
	vector < structure >::iterator itCurrent1;				// Création d'un vector de type "Colonne_struct" qui est un iterator de nom "itCurrent1".
	vector < structure >::iterator itEnd1 = Tab1.end( );	// Création d'un vector de type "Colonne_struct" qui est un iterator de nom "itEnd1" initialisé à la fin d'un tableau.
 
	vector < structure >::iterator itCurrent2;				// Idem
	vector < structure >::iterator itEnd2 = Tab2.end( );	// Idem
 
	cout << endl;
 
 
	itCurrent1 = Tab1.begin ( );					
	for ( ; itCurrent1 != itEnd1; ++itCurrent1 )				// Deux boucles for imbriquées permettent la comparaison;
	{															// On compare chaque ligne du tableau1 à l'ensemble des 
		bool trouve = 0;										// lignes du tableau2.									
																// Pour une ligne du tableau1, on parcour l'ensemble du tableau2
		itCurrent2 = Tab2.begin ( );							// Si la ligne est trouvée, on place "trouve" à true et on sort 
		for ( ; itCurrent2 != itEnd2; ++itCurrent2 )			// de la seconde boucle for.
		{														// Si la ligne n'est pas trouvée, "trouve" est à "false", on incrémente un compteur
			if ( *itCurrent2 == *itCurrent1 )					// (qui sera chargé de renseigner par la suite le nombre de lignes absentes)
			{													// et on affiche la ligne qui ne se trouve pas dans le tableau2.
				trouve = true;									// Enfin, lorsque la comparaison est finie, on renvoi la valeur du compteur.
				break;
			}
		}	
 
		if( trouve == false )
		{
			compteur = compteur++;
			cout << *itCurrent1;
		}
	}
	return compteur;
}



J'espere que vous comprendrez ce que je veux dire. N'hésitez pas s'il y a des soucis de compréhension.
Merci d'avance de votre aide.

Kira