C++:读取由 ; 分隔的 CSV 文件与\n

标签 c++ csv getline

<分区>

抱歉,如果这纯粹是愚蠢,但我遇到了通过 C++ 读取文件的问题。 这是我想要阅读的 CSV 数据:

5;1;0;3;3;5;5;3;3;3;3;2;3;3;0
5;1;0;3;3;5;0;3;3;3;3;2;0;0;3
5;1;1;3;3;0;0;0;0;3;5;2;3;3;3
0;3;5;5;0;2;0;3;3;0;5;1;1;0;0
0;0;3;5;5;2;0;0;0;0;5;5;1;1;0
0;0;0;0;5;2;0;0;0;0;0;5;5;1;0
;;;;;;;;;;;;;;
Code;Bezeichnung;Kosten;;;;;;;;;;;;
0;Ebene;6;;;;;;;;;;;;
1;Fluss;10; (begrenzt nutzbar);;;;;;;;;;;
2;Weg;2;;;;;;;;;;;;
3;Wald;8;;;;;;;;;;;;
4;Brücke;5;;;;;;;;;;;;
5;Felswand;12;;;;;;;;;;;;

在这里,我想读取第一个值(由 ;;;; 分隔)并将其存储在二维数组中。如果它被“;”完全分隔,那将不是问题。但是如果使用

while (getline(csvread, s, ';'))
{
[...]
}

我得到这样的信息:{5}{1}{0}{3}{3}{5}{5}{3}{3}{3}{3}{2}{3 }{3}{0\n5}{1} 所以它基本上保存了换行符并且不认为它是分隔符。

那么即使您有两个定界符,是否可以选择使用 getline?还是我完全离开了? 我还考虑过将它逐行读取为一个字符串,添加一个;到字符串并将其重写到文件中,以便使用 ; 重用 getline。但这并不是最好的选择,对吧?

最佳答案

您应该分别进行 '\n'';' 拆分:

// here split into lines by '\n'
while (getline(csvread, line, '\n'))
{
    // in here, split line by ;
    std::vector<std::string> elems;
    boost::split(elems, line, boost::is_any_of(";"));

    // do something with elems
}

关于C++:读取由 ; 分隔的 CSV 文件与\n,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30171443/

相关文章:

c++ - 计算字符串中元音的个数

c++ - 从另一个进程访问 STA 对象时出现问题

c++ - 如何将 Mercurial 标签嵌入到我的 C/C++ 代码中?

c++ - 如何开始使用 QuickFix 库

csv - 在 DB2 中将 select 语句的结果导出为 CSV 格式

python - 如何在 csv 文件中查找元素并编辑该文件

c++ - std::stringstream 可以设置失败/坏位的方法?

c++ - 从 C++ 文件中读取整数和字符的混合

excel - 在国际范围内将多行 csv 文件导入 Excel

c++ - 初学者错误 "getline"