當我試圖從檔案中讀取資料時,它不會更新 tempString2 的值。
它不是抓取和拆分新行,而是保存第一條資料行的最后一個值。
我認為第二個 getline 是問題的原因是正在讀取資料,并且回圈正在運行我需要它們的確切次數。
#include <iostream>
#include <fstream>
#include <string>
#include <sstream>
void PopulateWindLog(int dataIndex, std::string fileName, int const headerVecSize)
{
std::string tempString;
std::string tempString2;
std::stringstream tempStream;
// open data file
std::ifstream dataFile(fileName);
// skip the header line
std::getline(dataFile, tempString);
// while there is still data left in the file
while(std::getline(dataFile, tempString))
{
tempStream << tempString;
std::cout << tempString << std::endl;
for(int i = 0; i < headerVecSize; i)
{
std::getline(tempStream, tempString2, ',');
std::cout << tempString2 << std::endl;
if(i == dataIndex)
{
std::cout << tempString2 << " INSIDE IF STATEMENT !!!! " << std::endl;
}
}
}
}
這是我正在使用的資料集。對于復制,我正在尋找列“S”(索引 10)。headerVecSize 為 18。
WAST,DP,Dta,Dts,EV,QFE,QFF,QNH,RF,RH,S,SR,ST1,ST2,ST3,ST4,Sx,T
31/03/2016 9:00,14.6,175,17,0,1013.4,1016.9,1017,0,68.2,6,512,22.7,24.1,25.5,26.1,8,20.74
31/03/2016 9:10,14.6,194,22,0.1,1013.4,1016.9,1017,0,67.2,5,565,22.7,24.1,25.5,26.1,8,20.97
31/03/2016 9:20,14.8,198,30,0.1,1013.4,1016.9,1017,0,68.2,5,574,22.7,24,25.5,26.1,8,20.92
這是我得到的輸出。 構建程式的輸出
uj5u.com熱心網友回復:
std::getline()從輸入中提取字符并將它們附加到 str 直到發生以下情況之一(按列出的順序檢查)
- 輸入的檔案結束條件,在這種情況下,getline 設定 eofbit。
- 下一個可用的輸入字符是 delim,由 Traits::eq(c, delim) 測驗,在這種情況下,分隔符從輸入中提取,但不附加到 str。
- str.max_size() 字符已被存盤,在這種情況下 getline 設定失敗位并回傳。
(來自https://en.cppreference.com/w/cpp/string/basic_string/getline)
因此,從您的第一行輸入中讀取所有元素后,tempstream.good()是錯誤的。沒有進一步的輸入被讀取。
建議的解決方案:將定義移動tempstream到您的while回圈中。您將獲得good每行的狀態流。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/460422.html
