fstream et caractère spéciaux
Bonjour,
j'utilise fstream depuis quelques temps déjà mais là je suis totalement perdu car depuis que je me suis mis en tête de faire l'inverse de ce que je fait toujours c'est à dire prendre des données TXT pour les METTRE dans un server SQL et bien plus rien ne va...
Situation 1 :
La variable line vient d'un fichier texte
Code:
1 2 3 4 5 6 7
|
void OUTPUT_TO_FILE(string line)
{
fstream file("RESULT.TXT",ios::out|ios::app);
file << line << endl;
file.close();
} |
Situation 2 :
La variable line vient d'un serveur SQL (connection LATIN1)
Code:
1 2 3 4 5 6 7
|
void OUTPUT_TO_FILE(string line)
{
fstream file("RESULT.TXT",ios::out|ios::app);
file << line << endl;
file.close();
} |
La situation 1 fonctionne et la situation 2 fait planter le programme sur la ligne
Code:
fstream file("RESULT.TXT",ios::out|ios::app);
On peut déjà dire que le problème vient de ma variable "LINE"...
Mais pourquoi un variable string venant d'une connection SQL plante le programme ?
Voici la fonction qui forward les données SQL :
Code:
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
|
void GET_WORDS(string str)
{
match_results results;
string rxstring;
rxstring="[ ]{1}([0-9a-z-]{3,32})[ ]{1}"; // SIMPLE WORD
rpattern pat(rxstring, NOCASE | EXTENDED | GLOBAL | ALLBACKREFS | SINGLELINE);
match_results::backref_type br = pat.match( str, results );
// If it worked or not...
if( br.matched )
{
stringstream blubb;
string bla;
int i = 1;
while (i < results.cbackrefs())
{
blubb.clear();
blubb << results.backref(i);
bla = blubb.str();
blubb.str(""); // erase the stringstream content !!!
cout << bla << endl;
OUTPUT_TO_FILE(bla);
i=i+2;
}
}
}
void SQL_GET_CONTENT()
{
MYSQL mysql;
char content [4096];
stringstream blubb;
string bla;
//Initialisation de MySQL
mysql_init(&mysql);
string Basicquery = "SELECT CONTENT FROM URLTITLEMETACONTENT LIMIT 0,100;";
//Connection Option...
mysql_options(&mysql,MYSQL_READ_DEFAULT_GROUP,"libmysqld_client");
//If connection succeded...
//Sleep(10);
if(mysql_real_connect(&mysql,"localhost","toogle_user1","toogle_user1","toogle",0,NULL,0))
{
// mysql_set_character_set(&mysql, "utf8");
cout << "Connected to MySQL" << endl;
printf("Charset: %s\\", mysql_character_set_name(&mysql));
mysql_query(&mysql, Basicquery.c_str());
if (mysql_errno(&mysql))
{
cout << "SQL ERROR" << endl;
}
else
{
MYSQL_RES *result = NULL;
MYSQL_ROW row = NULL;
//On met le jeu de résultat dans le pointeur result
result = mysql_store_result(&mysql);
while ((row = mysql_fetch_row(result))!=NULL)
{
sprintf(content,"%s",row[0]);
blubb << content;
bla = blubb.str();
blubb.str("");
// stripscript(bla);
// stripstyle(bla);
// stripCodeComment(bla);
// striptags(bla);
// striplinereturn(bla);
GET_WORDS(bla);
}
}
mysql_close(&mysql);
}
else
{
cout << "COULD NOT CONNECT TO DB" << endl;
}
} |
Qu'ai-je fait de mal... Sans doute plein de chose... Mais lesquelles ?