我正在尝试将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停止计数?
答案 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
逐行读取,并在此循环内使用','
作为分隔符将结果字符串拆分为更多部分。