【问题标题】:Extract only few columns from a .dat file从 .dat 文件中仅提取几列
【发布时间】:2015-11-09 09:54:31
【问题描述】:

我必须用 c++ 为我的论文制作一个程序,打开并从文件 .dat 中只提取两列,就像这样,有很多行:

0.000000 -9.833374 1.000000 0.156921 0.125478 0.350911
5.015625 -9.831743 1.000000 0.157021 0.125752 0.349945
10.015625 -9.838824 1.000000 0.157101 0.125566 0.351512

我已经可以使用命令 getline() 打开和读取每一行,但我不知道如何仅提取我需要的列(特别是第二和第四列)。 我是使用这种编程语言的初学者,所以有人可以给我示例或指示如何获得此任务吗?

非常感谢

【问题讨论】:

标签: c++ extract multiple-columns getline istringstream


【解决方案1】:

您可以为此使用stringstream

ifstream file("data.dat")
string line;

while (getline(file,line))
{
    istringstream ss(line);

    // possibly you will want some other types here.
    string col2;  
    string col4;

    ss >> col2;    // extracts 1st col.
    ss >> col2;    // extracts 2nd col.

    ss >> col4;    // extracts 3rd col.
    ss >> col4;    // extracts 4th col.

    // Now you can something with col2 and col4
    cout << col2 << " " << col4 << endl;

}

请注意,首先我将第一列提取到col2,然后用第二列覆盖它。我为col4 做类似的事情。

当然,您可以为col2col4 使用其他类型,只要这与您的文件一致即可。

另外,如果您想分列阅读,只是想在之后将它们扔掉,请查看std::istream::ignore,它可以让您跳过输入。

【讨论】:

  • 所以使用这种语法(col1 和 col2)我的程序会自动理解我与 .dat 文件的第一列和第二列有关?
  • @PaoloOrsatti 不!标识符没有区别。 &gt;&gt; 运算符每次被调用时都会简单地读入一列。所以调用ss &gt;&gt; col; 两次将在第一列中读取col,然后将第二列读取到相同的变量(覆盖之前存储的第一列)
  • 非常感谢!你解决了我的问题,现在我可以提取我想要的列了。
  • 现在我有另一个问题:我必须将一列的 n 行数据与同一列 (n+1) 行的数据进行比较。解决方案?
  • @PaoloOrsatti 不客气。解决了这个问题后,您应该为您的新问题创建一个问题;)
猜你喜欢
  • 1970-01-01
  • 2012-12-15
  • 1970-01-01
  • 1970-01-01
  • 2018-12-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多