2009-07-02 84 views
6

在C++中读取制表符分隔文件并将每行存储为记录的最佳方式是什么?我一直在寻找一个开源的库来帮助解决这个问题,但一直没有成功,所以看起来我必须自己写。在C++中读取分隔文件

+1

我很惊讶,当我搜索这个时,我无法简单地从某个地方摘取一些代码来做这么简单的事情。无论如何,我为我的解决方案写了一个博客(基于Stack Exchange上的其他答案)[C++小知识](http://goo.gl/y0bOVv) – Wybird666 2014-07-24 15:45:41

回答

17
typedef vector<vector<string> > Rows; 
Rows rows; 
ifstream input("filename.csv"); 
char const row_delim = '\n'; 
char const field_delim = '\t'; 
for (string row; getline(input, row, row_delim);) { 
    rows.push_back(Rows::value_type()); 
    istringstream ss(row); 
    for (string field; getline(ss, field, field_delim);) { 
    rows.back().push_back(field); 
    } 
} 

这会让你开始。它没有做任何检查,每行有相同数量的字段,允许转义field_delim等。

+0

此代码在Visual Studio中完成了机器人工作。 错误是错误“C4430:缺少类型说明符 - int假定”。 我已经包含string.h – tumchaaditya 2012-04-26 05:04:23

5

使用iostreams没有问题 - 您可以用getline将每一行读入字符串,然后使用该字符串的stringstream来遍历字段。