我正在尝试编写.csv解析器,而且该任务似乎需要熟悉.csv输入文件流的本质。
我有一个.csv文件,名为" sample.csv"在文本编辑中看起来像这样:
1,2
3,4
2,4
5,6
我在C ++中编写以下代码:
ifstream myfile ("sample.csv");
double data;
char formatting;
myfile >> data; cout << data<<'\n';
myfile >> formatting; cout << formatting<<'\n';
myfile >> data; cout << data<<'\n';
myfile >> formatting; cout << formatting<<'\n';
myfile >> data; cout << data<<'\n';
myfile >> formatting; cout << formatting<<'\n';
myfile >> data; cout << data<<'\n';
myfile >> formatting; cout << formatting<<'\n';
在我看来,输出应该是这样的:
1
,
2
3
,
4
但是,我从终端获得以下输出:
1
,
2
3
0
3
03
到底是怎么回事?
答案 0 :(得分:0)
ifstream一般会忽略空格,因此您正在读取数字&#39; 1&#39;,然后是字符&#39;,&#39;,然后是数字&#39; 2&#39;,然后是字符&#39; 3&#39; (因为新行被忽略),然后你尝试读取一个数字,但实际上你有一个逗号。尝试重写代码,以便在从流中读取时不希望看到任何换行符或其他空格。
答案 1 :(得分:0)
在阅读字段时,您似乎一个接一个地下注。您需要读取数据 - &gt;格式化 - &gt;数据,重复。
ifstream myfile ("sample.csv");
double data;
char formatting;
myfile >> data; cout << data<<'\n';
myfile >> formatting; cout << formatting<<'\n';
myfile >> data; cout << data<<'\n';
myfile >> data; cout << data<<'\n';
myfile >> formatting; cout << formatting<<'\n';
myfile >> data; cout << data<<'\n';
该行第二个数字后的换行符终止该字段,而不会被读入formatting
。