【问题标题】:Reading delimited files in C++ [duplicate]在 C++ 中读取分隔文件 [重复]
【发布时间】:2010-11-07 17:22:19
【问题描述】:

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

【问题讨论】:

  • 我很惊讶,当我搜索这个时,我无法简单地从某个地方提取一些代码来完成如此简单的事情。无论如何,我为我的解决方案写了一篇博客(基于 Stack Exchange 上的其他答案)C++ Tidbits

标签: c++ open-source csv


【解决方案1】:
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 等。

【讨论】:

  • 此代码在 Visual Studio 中运行机器人。错误是错误“C4430:缺少类型说明符 - 假定为 int”。我已经包含了 string.h
  • 代码在 CentOS 上使用 g++ 编译得很好。不确定您没有添加什么来使其正常工作
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    维基百科的文章CSV_application_support中列出了一些库。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-07-22
      • 2014-12-14
      • 2016-02-06
      • 2015-08-08
      • 2020-08-14
      • 1970-01-01
      • 1970-01-01
      • 2017-07-13
      相关资源
      最近更新 更多