2016-02-24 6 views
-3

Я прочитал много сообщений, но что бы я ни делал, я не могу избавиться от проблемы. Мой входной файл, как показано нижене удалось прочитать файл с 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, и это не обрабатывается.

+0

Что вы пытаетесь сделать с этим: 'line.erase (std :: remove (line.begin(), line.end(), '\ r'), line.end());'? –

+0

Пытается удалить возвращаемый каретой \ r – GSD

+0

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

ответ

0

Вот фрагмент для разбора файла данных:

std::string token_1_line_1; 
std::string token_1_line_2; 
std::string token_2_line_2; 
std::string token_3_line_2; 
std::string text_line; 

while (inFile >> token_1_line_1) // Read text w/o line ending 
{ 
    getline(inFile, token_1_line_2, ','); 
    getline(inFile, token_2_line_2, ','); 
    getline(inFile, token_3_line_3); 
} 

Примечание: Приведенный выше код не был проверен.

Смежные вопросы