gpt4 book ai didi

c++ - C++ 中的列式文本抓取

转载 作者:太空宇宙 更新时间:2023-11-04 13:20:43 26 4
gpt4 key购买 nike

我有一个如下所示的文件

61101
test
3 69.7139 65.3935 22.2632
3 69.7708 65.6131 21.467
2 69.8974 66.0987 20.7391

我试图让它跳过前两行,只要第一列不是 4,我就对最后三列进行平均。

这就是我目前正在尝试的方法,但它似乎并没有真正起作用。

getline(frames_file,tempS);
getline(frames_file,tempS);
while(frames_file.good())
{
if(typePart != 4)
{
frames_file >> typePart >> posPart[0] >> posPart[1] >> posPart[2];
numLipid++;
aPos[0] = aPos[0] + posPart[0];
aPos[1] = aPos[1] + posPart[1];
aPos[2] = aPos[2] + posPart[2];
}
}
aPos[0] = aPos[0]/numLipid;
aPos[1] = aPos[1]/numLipid;
aPos[2] = aPos[2]/numLipid;

cout << " " << aPos[0] << " " << aPos[1] << " " << aPos[2];

这似乎没有捕获任何值(value)

最佳答案

我在这里看到了多个问题。

getline(frames_file,tempS);
getline(frames_file,tempS);
while(frames_file.good())

假设文件只包含两行。这里的预期结果是只读这两行,然后完成。

不幸的是,good() 在这里仍然是 true,因此其余代码将偏离轨道。 good(),一般来说,表示输入流之前的操作成功了。嗯,这里前面的操作成功了。您成功阅读了这两行。

good() 应在尝试下一次读取操作后 检查,以确定它是成功还是失败。

if(typePart != 4)
{
frames_file >> typePart >> posPart[0] >> posPart[1] >> posPart[2];

你能解释一下你的rubber duck吗?您如何期望 typePart 在阅读下一行之前 被设置为 4?根据你的问题,正如我所理解的那样,你应该阅读每一行,并且只在第一列为 4 时才执行计算。在这里,你甚至在阅读之前神秘地期望 typePart 被设置为 4有问题的行。

总结:

  • 使用 std::getline() 读取文件中的每一行,而不仅仅是前两行。这是为了让您正确地进行下一步:

  • AFTER 每次调用 std::getline() 时,检查 good()eof( ) 以确定 std::getline() 是否因为您到达了文件末尾而失败。如果是,到此为止,否则:

  • 将读取的行填充到 std::istringstream 中,然后使用 operator>> 使用它实际提取行的片段,如果是这样的话你更喜欢解析它。或者,使用您喜欢的任何其他方法来 parsig。

  • 检查 typePart 是否为 4,然后在提取线段之后执行所有计算,而不是之前。

关于c++ - C++ 中的列式文本抓取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35400692/

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