回答
我假設字段之間用條分隔,但記錄之間用換行符分隔。
首先,在使用std::getline
的文本行閱讀:
std::string line;
std::getline(std::cin, line);
然後,斷行的|
學邊界。
std::stringstream sline(line);
std::string field;
std::getline(sline, field, '|');
...
std::getline(sline, field, '|');
OP,如果您正在閱讀文件,請使用文件流的名稱而不是cin – Robotnik 2012-04-24 06:25:28
@Robotnik,我同意。另外,如果OP指出這不是作業,我會提出一個更完整的代碼示例。 – 2012-04-24 06:26:56
假設你有一個名爲 「FILE.DAT」
它看起來像這樣的文件:
item1|item2|item3|item4|item5|item6
該程序將打印出的每個項目在文件中:
#include <iostream>
#include <cstdlib>
#include <string>
#include <fstream>
int main(){
std::ifstream infile("file.dat");
std::string item;
getline(infile,item,'|');
while (!infile.eof()){
std::cout << item << std::endl;
getline(infile,item,'|');
}
return EXIT_SUCCESS;
}
我從來不推薦使用'.eof()'作爲循環條件。它幾乎總是產生錯誤的代碼。雖然你的代碼似乎是個例外,但我仍然推薦使用易於閱讀的:'std :: string item; while(std :: getline(infile,item,'|')){std :: cout << item <<「\ n」; }' – 2012-04-24 13:56:37
根據對於您使用的代碼的複雜性,您要查找的是CSV(逗號分隔值)文件讀取器的變體。有成千上萬在那裏,如果你的代碼需要強大的,我建議你使用其中的一種,而不是寫自己因爲有複雜如:
- 如果你的「價值」的一個實際上包含一個'|' 中的字符是什麼引號?
- 如果您的某個'值'包含回車 或換行符,該怎麼辦?
其中最受歡迎的是Boost tokeniser這應該很容易起牀和使用。你只需要確保你告訴記號器你正在使用'|'作爲現場分隔者。
查看this related question瞭解更多指針。
- 1. 閱讀電子酒吧文件
- 2. 閱讀文本分隔文件C
- 3. 閱讀rho分隔文件
- 4. 酒吧/管道分隔字段
- 5. 閱讀R中的分隔文件
- 6. 閱讀由換行符和逗號分隔的txt文件
- 7. 指定間隔寬度內的酒吧酒吧
- 8. jQplot酒吧分組
- 9. C#閱讀從逗號分隔文本文件到Windows窗體
- 10. Highcharts酒吧:高度由xAxis
- 11. 更新android酒吧酒吧
- 12. 閱讀與反斜線(\)分隔符C++輸入文件
- 13. 閱讀逗號分隔文件,並將數據放入ListView - C#
- 14. JavaFX應用程序:在閱讀文件時顯示酒吧進度
- 15. 在酒吧中繪製酒吧的值
- 16. 閱讀由tab分隔的文件,並將這些文字放在ArrayList中
- 17. 閱讀C中文件的一部分
- 18. 分組酒吧在GGPLOT2
- 19. gnuplot分組多個酒吧
- 20. 分組/堆疊酒吧GGPLOT2
- 21. CSS百分比酒吧
- 22. 在matlab中分組酒吧
- 23. 如何閱讀僅由LF分隔的文件中的每一行?
- 24. CSS topbar:垂直分隔符包裝了酒吧的內容
- 25. C++酒吧功能參數
- 26. Android - 如何添加分隔符/分隔符在底部酒吧導航
- 27. 靜電FOO = 「酒吧」 與MyClass.foo = 「酒吧」
- 28. 調用foo ::酒吧從酒吧:: BazController
- 29. 酒吧頂部酒吧關閉按鈕
- 30. 閱讀帶分隔符
[你有什麼嘗試?](http://mattgemmell.com/2008/12/08/what-have-you-tried/) – 2012-04-24 06:20:17
歡迎來到StackOverflow。你能提供你描述的輸入樣本嗎?另外,如何在輸入中處理換行符?作爲記錄分隔符,還是作爲字段中的數據? – 2012-04-24 06:20:44
閱讀它就像你會任何其他文件。或者改述你的問題。 – juanchopanza 2012-04-24 06:21:40