C++ 中的列文本抓取
Columned Text grabbing in c++
我有一个看起来像下面的文件
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];
这似乎没有抓住任何价值
我在这里看到了多个问题。
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];
你能向你的橡皮鸭解释一下,在你阅读下一行之前,你期望typePart
如何设置为 4?根据您的问题,正如我所指出的那样,您应该阅读每一行,并且仅在第一列为 4 时才执行计算。在这里,您神秘地期望typePart
甚至在阅读相关行之前就设置为 4。
总结一下:
使用 std::getline(( 读取文件中的每一行,而不仅仅是前两行。这是为了您正确地执行下一步:
每次调用
std::getline()
后,请检查good()
或eof()
以确定std::getline()
是否因为到达文件末尾而失败。如果是这样,请在此时停止,否则:将你的读取行塞进一个
std::istringstream
,并使用它来实际使用operator>>
提取行的片段,如果你喜欢这样解析它的话。或者,使用您喜欢的任何其他方法来解析。检查
typePart
是否为 4,然后在提取行的各个部分之后而不是之前执行所有计算。
相关文章:
- 为什么这个加载函数只抓取文件中的第一件事?
- 无法使用 OpenCv 3.4.5 从具有C++ dll 的网络摄像机 (rtsp) 中抓取帧
- 如何从日志文件中抓取状态代码?(在 C++ 中)
- DXGI API:AcquireTextFrame()从不抓取更新的图像,始终为空
- 如何从 avi 文件中抓取所有帧 - 如何修改 MS 样本采集卡样本
- 如何抓取指向Qt中弹出对话框的指针,该对话框阻止了QTest中的UI线程
- 为什么抓取窗口标题的代码会导致应用崩溃?
- 用Xcb而不是Xlib抓取像素的颜色
- 如何在C ++(qt)代码中使用python脚本?(网页抓取方面)
- OpenCV 3.2 在抓取时提供选择超时,但 fscyber 可以工作
- 使用 Matrox 进行帧抓取
- C++生产者使用者中,同一使用者线程会抓取所有任务
- 在编译时间之前抓取常数值
- OpenCV + QML(从另一个线程抓取帧)
- OpenCV视频捕获抓取和检索
- 从文本中抓取句子,将所有句子分别存储在某个数据结构中
- 视频抓取不起作用 OpenCV
- 从二进制文件中抓取文本时,为什么 xdg_vtnr=8 是我的结果
- C++ 中的列文本抓取
- 从Windows应用程序的文本框中抓取文本