Я прочитал много сообщений, но что бы я ни делал, я не могу избавиться от проблемы. Мой входной файл, как показано нижене удалось прочитать файл с getline() правильно
getData getData,value1,value2
string value, line;
while (getline(inFile, line)) {
line.erase(std::remove(line.begin(), line.end(), '\r'), line.end());
stringstream linestream(line);
getline(linestream, value, ',');
Logging::PrintInfo("Got Request3 %s.\n",value.c_str());
}
я получаю печать, как
Got Request3 getData --> first loop Got Request3 ta -->second loop.
Начальные символы вырубаются из строки.
Я попробовал нижеследующее также для обрезки \ r, но проблема все еще существует.
if (line.size() && line[line.size()-1] == '\r') {
//line1 = line.substr(0, line.size() - 1);}
line.erase(0, line.find_first_not_of("\r"));
line.erase(line.find_last_not_of("\r")+1);
Пробовал делать
line.erase(std::remove(line.begin(), line.end(), '\r'), line.end());
line.erase(std::remove(line.begin(), line.end(), '\n'), line.end());
line.erase(std::remove(line.begin(), line.end(), '\t'), line.end());
line.erase(std::remove(line.begin(), line.end(), '\f'), line.end());
line.erase(std::remove(line.begin(), line.end(), '\v'), line.end());
line.erase(line.begin(), std::find_if(line.begin(), line.end(), std::bind1st(std::not_equal_to<char>(), ' ')));
line.erase(std::find_if(line.rbegin(), line.rend(), std::bind1st(std::not_equal_to<char>(), ' ')).base(), line.end());
Но мой вопрос не решен. Первые несколько символов все еще потеряны. После нескольких попыток я обнаружил, что проблема связана с \ r. Но у меня все еще есть проблема.
Как только я удаляю \ r, моя следующая строка строки обрезается. Но если я его не отрежу, моя первая строка имеет \ r, и это не обрабатывается.
Что вы пытаетесь сделать с этим: 'line.erase (std :: remove (line.begin(), line.end(), '\ r'), line.end());'? –
Пытается удалить возвращаемый каретой \ r – GSD
line.erase (std :: remove (line.begin(), line.end(), '\ r'), line.end()); \t \t line.erase (std :: remove (line.begin(), line.end(), '\ n'), line.end()); \t \t line.erase (std :: remove (line.begin(), line.end(), '\ t'), line.end()); \t \t line.erase (std :: remove (line.begin(), line.end(), '\ f'), line.end()); \t \t line.erase (std :: remove (line.begin(), line.end(), '\ v'), line.end()); \t \t line.erase (line.begin(), std :: find_if (line.begin(), line.end(), std :: bind1st (std :: not_equal_to(), ''))); \t \t line.erase (std :: find_if (line.rbegin(), line.rend(), std :: bind1st (std :: not_equal_to (), '')). Base(), line.end ()); –
GSD