2013-06-06 56 views
1

我寫了一個C++程序,我有多個CSV文件用作輸入,我一次打開一個,並在將數據提取到輸出文件(這是唯一文件)後關閉它。C++ Getline&seekg

我運行getline(inFile,line); outFile < < line < < endl;

我把它輸出後約200-300行之後,並在我的輸出一個大空白CSV文件

突然但當我慢的代碼,如系統(「暫停」運行這段代碼,僅只有少數文件)在循環中,我可以得到提取我想要的完美...

我的程序運行速度快,爲什麼getline會跳過我想要的東西的一部分?

我真的不知道問題出在哪裏是從哪裏來的,或者從哪裏開始

非常感謝!

if (dataname[i] == dataname) 
{ 
    inFile.seekg(datalength[i], ios::beg); 
    for (int j = 0; j < datacount[i]; j++) 
    { 
     getline(inFile, line); 
     outFile << line << endl; 
    } 

} 
+0

我想我們需要看到更多的代碼。 'datalength [i]'來自哪裏,例如? –

+0

這只是seekg的長度...... – user2458864

+0

你是如何得到這個「長度」的?我的觀點是,至少在Windows上,換行符與''\ n''的長度不同,因此seekg不僅僅是您讀取的數據的大小。 –

回答

1

參考Why seekg does not work with getline?

的seekg(POS)前添加一個明確的()調用調用以清除可能已通過,則對getline(INFILE,行)調用創建的所有錯誤標誌。

inFile.clear(); // Clears all error flags. 
inFile.seekg(pos);