[英]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嗎? 根據您的問題,正如我所不理解的那樣,您應該閱讀每一行,並且僅在第一typePart
4時才執行計算。在這里,您甚至希望在閱讀有問題的行之前將typePart
設置為4。
總結一下:
使用std :: getline()讀取文件中的每一行,而不僅僅是前兩行。 這是為了讓您正確地下一步:
在每次調用std::getline()
,檢查good()
或eof()
以確定std::getline()
由於到達文件末尾而失敗。 如果是這樣,請在此處停止,否則:
將您的讀取行填充到std::istringstream
,並使用它實際通過operator>>
提取該行的內容,如果那是您更喜歡解析的方式。 或者,使用任何其他方法來解析您喜歡的。
檢查typePart
是4,然后執行所有的計算后,你不提取前行的部分。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.