// Tri Titres-Tarifs.cpp : définit le point d'entrée pour l'application console.
//
////////////////////////////////////////////////////////////////////////////////////////////////
/// Travail demandé: ///
/// ///
/// Ecrire un programme en C/C++ qui permettrait de, tout dabord trier les titres des ///
/// magazines par ordre alphabetique, avec leur nombre et le total de leurs tarifs. ///
/// Il faudra ensuite faire la moyenne de ces tarifs pour chaque magazines. ///
/// ///
////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////
/// Bibliothèques ///
/////////////////////
#include <stdafx.h>
#include <string>
#include <fstream>
#include <iostream>
#include <sstream>
#include <cassert>
#include <vector>
#include <algorithm>
using namespace std;
////////////////////////////////
/// Déclaration de Variables ///
////////////////////////////////
typedef struct Colonnes_struct
{
string col1;
string col2;
string col3;
string col4;
string col5;
string col6;
string col7;
string col8;
bool operator<(Colonnes_struct& cols)
{
if ( col1 < cols.col1 )
return true;
if ( col2 < cols.col2 )
return true;
return false;
};
};
////////////////////////////////
/// Prototype de Fonction(s) ///
////////////////////////////////
ostream& operator<< (ostream& out, Colonnes_struct colonneS );
///////////////////////////
/// Programme Principal ///
///////////////////////////
int _tmain(int argc, _TCHAR* argv[])
{
// Ouverture du fichier 20090727-TABLES_EDI.csv en lecture.
ifstream fichier1("C:\\Documents and Settings\\bastien\\Bureau\\Offres - Tables EDI Excel\\20090727-TABLES_EDI.csv");
if ( fichier1.is_open ( ) == false ) // Test de l'ouverture du fichier1.
{
cout << "Erreur lors de l'ouverture du fichier 20090727-TABLES_EDI.csv" << endl;
assert ( false );
return -1;
}
// Ouverture du fichier Ecriture du fichier2.txt en écriture.
ofstream fichier2("C:\\Documents and Settings\\bastien\\Bureau\\Ecriture du fichier2.txt");
if ( fichier2.is_open ( ) == false ) // Test de louverture du fichier2
{
cout << "Erreur lors de l'ouverture du fichier Ecriture du fichier2" << endl;
assert ( false );
return -1;
}
string ligne; // variable contenant chaque ligne lue
Colonnes_struct colonneS;
vector < Colonnes_struct > MonTableau;
// cette boucle s'arrête dès qu'une erreur de lecture survient
while ( getline( fichier1, ligne ) )
{
getline( fichier1, colonneS.col1, ';' );
//cout << colonne1 << endl;
getline( fichier1, colonneS.col2, ';' );
//cout << colonne2 << endl;
getline( fichier1, colonneS.col3, ';' );
//cout << colonne3 << endl;
getline( fichier1, colonneS.col4, ';' );
//cout << colonne4 << endl;
getline( fichier1, colonneS.col5, ';' );
//cout << colonne5 << endl;
getline( fichier1, colonneS.col6, ';' );
//cout << colonne6 << endl;
getline( fichier1, colonneS.col7, ';' );
//cout << colonne7 << endl;
getline( fichier1, colonneS.col8);
//cout << colonne8 << endl;
cout << colonneS.col1 << "\t" << colonneS.col4 << endl;
MonTableau.push_back(colonneS);
fichier2 << colonneS.col1 << "\t"<< colonneS.col4 << endl; // On écrit les deux colonnes qui nous intérresses.
}
// Ouverture du fichier 20090727-TABLES_EDI.csv en lecture.
ifstream fichier3("C:\\Documents and Settings\\bastien\\Bureau\\Offres - Tables EDI Excel\\20090731-TABLES_EDI.csv");
if ( fichier3.is_open ( ) == false ) // Test de l'ouverture du fichier3.
{
cout << "Erreur lors de l'ouverture du fichier 20090731-TABLES_EDI.csv" << endl;
assert ( false );
return -1;
}
// Ouverture du fichier Ecriture du fichier4.txt en écriture.
ofstream fichier4("C:\\Documents and Settings\\bastien\\Bureau\\Ecriture du fichier4.txt");
if ( fichier4.is_open ( ) == false ) // Test de louverture du fichier4
{
cout << "Erreur lors de l'ouverture du fichier Ecriture du fichier4" << endl;
assert ( false );
return -1;
}
string ligne1; // variable contenant chaque ligne lue
vector < Colonnes_struct > MonTableau2;
// cette boucle s'arrête dès qu'une erreur de lecture survient
while ( getline( fichier3, ligne1 ) )
{
getline( fichier3, colonneS.col1, ';' );
//cout << colonne1 << endl;
getline( fichier3, colonneS.col2, ';' );
//cout << colonne2 << endl;
getline( fichier3,colonneS.col3, ';' );
//cout << colonne3 << endl;
getline( fichier3, colonneS.col4, ';' );
//cout << colonne4 << endl;
getline( fichier3, colonneS.col5, ';' );
//cout << colonne5 << endl;
getline( fichier3, colonneS.col6, ';' );
//cout << colonne6 << endl;
getline( fichier3, colonneS.col7, ';' );
//cout << colonne7 << endl;
getline( fichier3, colonneS.col8);
//cout << colonne8 << endl;
cout << colonneS.col1<< "\t" << colonneS.col4 << endl;
MonTableau2.push_back(colonneS);
fichier4 << colonneS.col1 << "\t"<< colonneS.col4 << endl; // On écrit les deux colonnes qui nous intérresses.
}
// Affichage du tableau pour le fichier 1
for ( unsigned int i = 0; i < MonTableau.size() ; i++ )
{
cout << "Mon Tableau: "
<< colonneS.col1 << " " << colonneS.col2 << " " << colonneS.col3 << " " << colonneS.col4
<< " " << colonneS.col5 << " " << colonneS.col6 << " " << colonneS.col7 << " " << colonneS.col8
<< endl;
}
// Affcihage du tableau our le fichier 2
for ( unsigned int i = 0; i < MonTableau2.size() ; i++ )
{
cout << "Mon Tableau2: "
<< colonneS.col1 << " " << colonneS.col2 << " " << colonneS.col3 << " " << colonneS.col4
<< " " << colonneS.col5 << " " << colonneS.col6 << " " << colonneS.col7 << " " << colonneS.col8
<< endl;
}
vector < Colonnes_struct > vResult;
vResult.reserve ( max ( MonTableau.size ( ), MonTableau2.size ( ) ),
set_difference ( MonTableau.begin ( ), MonTableau.end ( ),
MonTableau2.begin ( ), MonTableau2.end ( ),
vResult.begin ( ) ));
fichier2.close(); // on referme le fichier2.
fichier1.close(); // on referme le fichier1.
fichier4.close(); // on referme le fichier4.
fichier3.close(); // on referme le fichier3.
return 0;
}
///////////////////////////////
/// Décaration de Fonctions ///
///////////////////////////////
ostream& operator<< (ostream& out, Colonnes_struct colonneS )
{
out << colonneS.col1 << colonneS.col2 << colonneS.col3 << colonneS.col4
<< colonneS.col5 << colonneS.col6 << colonneS.col7 << colonneS.col8 << endl;
return out;
}