Il manque la fin du programme. En fait c'est vraiment très simple à faire si tu utilises la structure map<> de la STL :
http://www.sgi.com/tech/stl/Map.html
L'exemple donné sur la page parle de lui-même en ce qui concerne l'insertion d'élément dans une map (opérateur []). Or l'opérateur ordonnant les std::string est par défaut (la vie est bien faite !) l'ordre alphabétique ;-)
#include <fstream>
#include <iostream>
#include <string>
#include <map>
// Une structure contenant les infos
struct infos{
std::string nom;
std::string prenom;
std::string appareil;
std::string prise;
std::string inventaire;
std::string adresse_ip;
};
// Parser une ligne d'info
bool read_line_infos(
const std::string & f_in,
struct infos & data
){
//Lit une chaine et met infos dans data
//return true si tout va bien, false sinon
}
// Lire le fichier d'info et le mettre dans un dico
bool read_file_infos(
std::string & filename_in,
std::map<std::string,struct infos> & dico
){
std::ifstream f_in(filename_in);
if (f_in){
std::string ligne; // variable contenant chaque ligne lue
// cette boucle s'arrête dès qu'une erreur de lecture survient
for(unsigned int no_line=1;std::getline(fichier, ligne);++no_line){
// afficher la ligne à l'écran
struct infos data;
if( !read_line_infos(ligne,data) ){
std::cerr << "La ligne " << no_line
<< "["<< ligne << "]" << std::endl;
}else{
dico[data.nom]=data;
}
}
return true;
}
std::cerr << "Le fichier " << filename
<< "n'a pu être ouvert" << std::endl;
return false;
}
bool read_file_infos(
std::string & filename_out,
const std::map<std::string,struct infos> & dico
){
std::ofstream f_out(filename_out);
if(f_out){
std::map<std::string,struct infos>::const_iterator
dit(dico.begin()),
dend(dico.end());
for(;dit!=dend;++dit){
const struct_info & data=dit->second;
f_out << data.nom << "\t" << data.prenom << std::endl;
}
return true;
}
return false;
}
int main(){
const std::string filename_in="plop.txt";
const std::string filename_out="plop2.txt";
std::map<std::string,struct infos> dico;
// Lire le fichier
read_file_infos(filename_in,dico);
// Ecrire les datas
read_sorted_file_infos(filename_out,dico);
return 0;
}
Ou quelque chose dans l'idée ;-)
Bonne chance


