从 .dat 文件中仅提取几列
Extract only few columns from a .dat file
我必须用 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() 打开和读取每一行,但我不知道如何只提取我需要的列(特别是第二和第四列)。
我是使用这种编程语言的初学者,所以有人可以给我示例或说明如何获得此任务吗?
非常感谢
您可以为此使用 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
.
做类似的事情
当然,您可以为 col2
和 col4
使用其他 类型 ,只要这在您的文件中是一致的即可。
此外,如果您 不想 阅读专栏,只是想在之后将它们扔掉,请查看 std::istream::ignore
,这让您可以跳过输入。
我必须用 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() 打开和读取每一行,但我不知道如何只提取我需要的列(特别是第二和第四列)。 我是使用这种编程语言的初学者,所以有人可以给我示例或说明如何获得此任务吗?
非常感谢
您可以为此使用 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
.
当然,您可以为 col2
和 col4
使用其他 类型 ,只要这在您的文件中是一致的即可。
此外,如果您 不想 阅读专栏,只是想在之后将它们扔掉,请查看 std::istream::ignore
,这让您可以跳过输入。