Ragazzi sto uscendo un po pazzo per questa cosa ma credo che sia una stupidata la soluzione(scemo io che non ci arrivo), nella parte di programma in C++ qui in basso io trasformo in hash una frase (nel codice qui senza senso), poi controllo la sua presenza in un file txt, se non ci sta viene aggiunta e di conseguenza mi viene copiata nel db usando un wrapper di sqlite.
Il fatto è che anche se esiste l hash nel txt mi procede con la copia della domanda nel db, l istruzione con la query del db mi viene comunque eseguita.
il problema sta nella zona della verifica della presenza dell hash nel txt. come posso dire a quell " if " di non procedere con la copia nel db?
#include <iostream>
#include <fstream>
#include <string>
#include <stdlib.h>
#include <cstdlib>
#include <ctime>
#include <sqlite_modern_cpp.h>
#include <unordered_set>
#include "md5.h"
using namespace sqlite;
using namespace std;
int main()
{
fstream file("test.txt");
string line;
string quest1="come";
string congiunzione="stai";
string posi="amico";
string puntoesc="puntodidomanda";
unordered_set<string> res;
while(file>>line) //INIZIO CONTROLLO HASH IN TXT
{
res.insert(line);
}
do
{
string hash;
hash = md5(quest1 + congiunzione + posi + puntoesc);
cout << hash << endl;
if (res.find(hash) != res.end())
cout << " exist." << endl;
else
cout << "not exists, copying..." <<endl;
std::ofstream outfile; //INIZIO COPIA HASH NEL TXT
outfile.open("test.txt", std::ios_base::app);
outfile << hash << '\n'; //FINE COPIA HASH NEL TXT
// INIZIO CHIAMATA DB
try {
database db("Domande.db");
db << u"insert into Corrette (QUEST1,CONGIUNZIONE,AGGETTIVO,PUNTOESC) values (?,?,?,?);"
<< quest1
<< congiunzione
<< posi
<< puntoesc;
cout << "OK id= " << db.last_insert_rowid() << endl;
}
catch (exception& e) {
cout << e.what() << endl;
}
//FINE CHIAMATA DB
break;
} while (true); //FINE CONTROLLO HASH IN TXT
}