无法正确读取getline()文件

时间:2016-02-24 20:25:55

标签: c++

我读过很多帖子,但无论我做什么,我都无法摆脱这个问题。 我的输入文件如下所示

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 \ n,但问题仍然存在。

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 \ n。但我还是有问题。

一旦删除\ r,我的下一行字符串就会被删除。但是,如果我不剪切它,我的第一行有一个\ r \ n并且没有被处理。

1 个答案:

答案 0 :(得分: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);
}

注意:上述代码尚未经过测试。