cplusplus导入csv无法识别第一列?

时间:2014-03-04 07:21:03

标签: c++ csv

我正在尝试将csv文件导入到我的c ++程序中,但我遇到了一些问题,并希望得到一些澄清。

csv文件中的数据排列如下。如您所见,我想导入12个单元格。

x, y, z, p
1, 2, 3, 4
5, 6, 7, 8

导入所述csv文件的功能如下:

  while ( getline (myfile, stringg, ','))
    {          
        std::cout << "j: " << j << "  " << stringg << std::endl;

        j++; //Note: j counts each cell.
    }
    myfile.close();
}

一切进口都很好。然而,似乎j已停止计数。这不应该是这种情况,因为csv文件中的数字仍在打印中。

j: 0 x
j: 1 y
j: 2 z 
j: 3 p
1
j: 4 2
j: 5 3
j: 6 4
5
j: 7 6
j: 8 7
j: 9 8

现在我知道为什么我相信它正在这样做。每行的结尾最后没有逗号。然而!这仍然不能解释为什么j停止计数?

2 个答案:

答案 0 :(得分:3)

j的数量是正确的......如果仔细查看一下,您的文件将会是这样的

x, y, z, p'\n'
1, 2, 3, 4'\n'
5, 6, 7, 8'\n'

所以,当您j is 3读取的getline()行的值为p'\n'1时,当您在控制台上打印时

j: 3 p
1

之后j增加并且下一个标记在2中读取...同样用于休息..

答案 1 :(得分:0)

getline正在读取输入,直到下一个','字符。在您的情况下,这意味着stringg将包含此内容:

1. iteration: stringg == "x"
2. iteration: stringg == " y"
3. iteration: stringg == " z"
4. iteration: stringg == " p\n1" // The fourth string contains the next line!

调试程序时,这些错误应该很容易看到。

解决此问题的一种方法可能是使用默认getline逐行读取,并在此循环内使用','作为分隔符将结果字符串拆分为更多部分。