Merci de votre réponse.
J'ai récrit un petit test complet qui exemplifie mon problème:
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
|
/// Includes:
#include <iostream>
#include <fstream>
#include <string>
#include <unistd.h>
#include <boost/regex.hpp>
#include <boost/algorithm/string.hpp>
#include <readline/readline.h>
#include <readline/history.h>
using namespace std;
unsigned mySplit(std::list<std::string>& l, std::string& s, boost::regex& r)
{
return boost::regex_split(std::back_inserter(l), s, r);
}
int main(int argc, char **argv){
string line;
boost::regex regsep("\\t"), regvalid(".+\\t.+"), myreg;
int cnt, error; error = argc;
string arg = (string) argv[1];
const char* infile = arg.c_str();
string title;
vector <string> vsyms;
/// Load file:
ifstream fin(infile);
/// Process File:
cnt = 0;
while( fin.good() ) {
line = ""; cnt++;
getline(fin,line);
if(not(regex_match(line,regvalid))) continue;
// Split line:
string params;
std::list <std::string> alist; alist.clear(); vsyms.clear();
mySplit(alist,line,regsep);
title = *(alist.begin()); alist.pop_front();
while( alist.size() ){ vsyms.push_back(*(alist.begin())); alist.pop_front(); }
cout << to_string(error) << " : " << to_string(cnt) << " : " << title << " arg1: " << vsyms[0] << " arg2: " << vsyms[1] << endl;
}
return 0;
}
/* compilation:
g++-4.6 -std=c++0x -Wl,-R/usr/lib -pthread -I./ -lboost_regex -lreadline test.cpp -o test
*/ |
Je peux faire tourner le programme avec les 2 listes suivantes:
liste 1:
Color Name Color HEX
AliceBlue #F0F8FF
AntiqueWhite #FAEBD7
Aqua #00FFFF
Aquamarine #7FFFD4
liste 2:
Titre data1 data2
test1 oui non
test2 non oui
<test3> peut-être bien
Avec la liste 1, le résultat est illisible, mes variables d'environnement sont imprimées en fin d'output (buffer overflow?):
correctif: ceci n'arrive plus, peut-être qu'alors il manquait une tabulation.
# ./test liste1
2 : 1 : Color Name arg1: Color HEX arg2: ◈◈o◈◈◈o◈◈◈◈◈◈_◈◈◈◈◈◈◈◈◈◈◈◈◈`2◈T◈:◈◈◈◈◈p◈o◈◈◈◈◈◈◈◈◈◈◈◈x!
◈◈◈@◈◈◈◈@`2◈[2@◈2◈E◈@◈2◈◈@◈◈◈◈6@◈|9◈◈◈◈o◈◈7@◈◈O◈wGf◈
◈6@◈◈o◈◈◈O=◈k◈d◈◈◈}5◈d◈◈@◈◈o◈◈6@◈◈o◈◈6@◈◈o◈◈◈o◈◈◈o◈◈◈
(..etc..)
»#◈◈r◈x86_64e
Avec la liste 2, le résultat est presque bon mais pas tout à fait vers la fin:
correctif: non avec liste2 tout est OK (il manquait effectivement une tab dans la précédente liste2):
# ./test liste2
2 : 1 : Titre arg1: data1 arg2: data2
2 : 2 : test1 arg1: oui arg2: non
2 : 3 : test2 arg1: non arg2: oui
2 : 4 : <test3> arg1: peut-être arg2: bien
Le plus étrange est que ceci ne concerne que l'extrant console car dans mon application les champs de la database sont remplis correctement. Problème d'encodage? J'ai essayé plusieurs encodages sans succès.
Merci encore de votre aide.
Partager