簡體   English   中英

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嗎? 根據您的問題,正如我所不理解的那樣,您應該閱讀每一行,並且僅在第一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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM