Mais, ceci dit, devoir avoir recours à mdac ou à un gestionnaire ODBC alors qu'un simple fichier texte du genre de
terme_francais terme_kabile
peut suffir, cela se rapproche fort du fait de sortir la "grosse berta" pour chasser un moustique 
Quand on pense au fait que, pour obtenir une recherche plus rapide, il suffit de deux map, la premiere ayant pour clé le terme francais et pour valeur le terme kabile, et la seconde ayant pour clé le terme kabile et pour valeur le terme francais, il y a parfaitement moyen d'éviter de sortir l'artillerie lourde 
En nommant le fichier texte en dur du nom de "dico.txt" et en ayant une classe (logiquement nommée Dico, par exemple
) du genre de
1 2 3 4 5 6 7 8 9 10 11 12 13 14
|
class Dico
{
public:
Dico();
~Dico();
const std::string& SearchKabil(const std::string&);
const std::string& SearchFrench(const std::string&);
void Add(string french="",string kabil="");
private:
std::map<std::string,std::string> frenchtokabil;
std::map<std::string,std::string> kabiltofrench;
bool modified;
}; |
Le constructeur serait sous la forme de
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
|
Dico::Dico():modified(false)
{
std::ifstream ifs("dico.txt");
std::string french;
std::string kabil;
std::string read;
if(!(ifs))
{
std::cout<<"impossible de trouver le ficher dictionnaire"<<std::endl;
}
else
{
while(std::getline(ifs,read))
{
std::istringstream iss(read);
iss>>french>>cabil;
frenchtokabil.insert(std::make_pair(french,kabil));
kabiltofrench.insert(std::make_pair(kabil,french));
}
}
} |
le destructeur prendrait la forme de
1 2 3 4 5 6 7 8 9 10 11 12 13
|
Dico::~Dico()
{
if(modified==true)
{
std::ofstream ofs("dico.txt");
for(std::map<std::string,string>::iterator it=frenchtokabil.begin();
it!=frenchtokabil.end();it++)
{
ofs<<(*it).first<<" "<<(*it).second;
}
}
} |
Les fonctions SearchKabil et SearchFrench sont du genre de:
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
|
/* Fonction qui renvoie le terme kabil trouvé
* @in: terme français fournis
* @out: terme kabil trouve
*/
const std::string& Dico::SearchKabil(const std::string& french)
{
/* il est possible que le terme ne soit pas encore dans le dico
* Si c'est le cas, on le signale, et on propose de le rajouter
*/
std::map<std::string>::iterator it=frenchtokabil.find(french);
if(it==frenchtokabil.end())
{
std::cout<<"aucune correspondance kabil pour "<<french<<std::endl
<<"Voulez vous le rajouter au dictionnaire (O/N)?"
<<std::endl;
std::string rep;
std::cin>>rep;
if(rep=="o" || rep=="O")
{
Add(french);
return frenchtokabil.find(french).second;
}
}
else
return (*it).second;
}
/* fonction qui renvoie le terme francais
* @in terme kabil recherché
* @out: terme francais correspondant
*/
const std::string& Dico::SearchFrench(const std::string& kabil)
{
/* il est possible que le terme ne soit pas encore dans le dico
* Si c'est le cas, on le signale, et on propose de le rajouter
*/
std::map<std::string>::iterator it=kabiltofrench.find(french);
if(it==kabiltofrench.end())
{
std::cout<<"aucune correspondance francaise pour "
<<french<<std::endl
<<"Voulez vous le rajouter au dictionnaire (O/N)?"
<<std::endl;
std::string rep;
std::cin>>rep;
if(rep=="o" || rep=="O")
{
Add(french);
return kabiltofrench.find("",kabil).second;
}
}
else
return (*it).second;
} |
La fonction Add prendrait la forme de
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
|
void Add(string french, string kabil)
{
/* Avec deux chaines potentiellement vide, on a quatre possibilités
* (dont une qui a peu de chances d'arriver)
* - on n'a aucun des termes
* - on a le terme kabil
* - on a le terme francais
* - on a les deux termes (peu de chances ;))
*/
if(french!="")
{
std::cout<<"veuillez introduire la correspondance kabile pour "
<<french<<": ";
cin>>kabil;
}
else if(kabil!="")
{
std::cout<<"veuillez introduire la correspondance francaise pour "
<<french<<": ";
cin>>french;
}
else if(french=="" && kabil=="")
{
std::cout<<"veuillez introduire le terme francais :"
cin>>french;
std::cout<<"veuillez introduire le terme kabil correspondant :"
cin>>kabil;
}
/* une fois qu'on est sur d'avoir les deux termes, on les rajoute aux
* dicos
*/
frenchtokabil.insert(std::make_pair(french,kabil));
kabiltofrench.insert(std::make_pair(kabil,french));
//et on signale que le dictionnaire a été modifié
modified=true;
} |
et en préparant un menu demandant ce que l'on veut faire, on obtient déjà un dico, certes limité, mais fonctionnel
Partager