gpt4 book ai didi

C++ 读取文件

转载 作者:太空狗 更新时间:2023-10-29 21:06:08 24 4
gpt4 key购买 nike

我想我有一个按列组织的文件,其中的数据需要存储在一种类型的 vector 中以存储每个数据列。

数据如下:

ATOM      1  N   PRO     1     -38.396  -1.525   2.011 -0.18 14.01
ATOM 2 CA PRO 1 -36.931 -1.372 2.090 0.08 13.02
ATOM 3 C PRO 1 -36.353 -0.411 1.059 0.35 12.01
ATOM 4 O PRO 1 -36.988 -0.061 0.086 -0.37 16.00
ATOM 5 CB PRO 1 -36.368 -2.749 1.735 0.03 14.03
ATOM 6 CG PRO 1 -37.417 -3.202 0.763 0.01 14.03
ATOM 7 CD PRO 1 -38.692 -2.893 1.489 0.08 14.03

开头还有一些多余的列是我不想要的,如何根据需要选择数据。有人可以指引我正确的方向吗?

最佳答案

只读入数据,忽略不关心的值:

std::string c1, c3, c4;
int c2, c5;
double c6, c7, c8, c9, c10;

if (!(input_stream >> c1 >> c2 >> c3 >> c4 >> c5 >> c6 >> c7 >> c8 >> c9 >> c10))
{
// error
}

如果您想确保只从一行中读取数据,请先使用 getline 将该行放入一个字符串中,然后使用一个 istringstream 作为您的输入流。您需要有一种方法来区分有效数据线和非数据线。假设每条有效数据行都以“ATOM”开头,并且每一行以“ATOM”开头实际上都是有效数据行是否安全?如果是这样,您可以使用它来确定该行是否是数据:

for (std::string line; std::getline(file_stream, line); )
{
std::string c1, c3, c4;
int c2, c5;
double c6, c7, c8, c9, c10;

std::istringstream iss(line);

iss >> c1;
if (c1 == "ATOM")
{
if (!(iss >> c2 >> c3 >> c4 >> c5 >> c6 >> c7 >> c8 >> c9 >> c10))
{
// error
}
}
}

关于C++ 读取文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8199368/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com