我的文本文件看起來像這樣:逐行讀取文件中的行和存儲不同的變量
1 52 Hayden Smith 18:16 15 M Berlin
2 54 Mark Puleo 18:25 15 M Berlin
3 97 Peter Warrington 18:26 29 M New haven
4 305 Matt Kasprzak 18:53 33 M Falls Church
5 272 Kevin Solar 19:17 16 M Sterling
6 394 Daniel Sullivan 19:35 26 M Sterling
7 42 Kevan DuPont 19:58 18 M Boylston
8 306 Chris Goethert 20:00 43 M Falls Church
9 262 James Sullivan 20:12 28 M Sterling
10 348 Bill Gaudere 20:17 54 M Hudson
11 13 Travis Wheeler 20:23 31 M Clinton
12 69 Eric Anderson 20:34 54 M Clinton
13 341 Alex Teixeira 20:46 0 M Clinton
14 112 James Long 20:50 38 M 0
15 279 Nate Richards 21:31 17 M Berlin
......................................................
有八列,通過「標籤」分開,除第一個名字和姓氏用空格隔開。
我必須有八種不同類型的變量。
int a;
int b;
string c;
string d;
string e;
int f;
char g;
string h;
我需要逐行讀取文件行和cout每行的a,b,c,d,e,f。 我也需要這些變量供以後使用。
所以,我嘗試這樣做:
std::ifstream infile("text.txt");
int a;
int b;
string c;
string d;
string e;
int f;
char g;
string h;
while(infile>>a>>b>>c>>d>>e>>f>>g>>h)
{
cout <<"C is: "<<c<<endl; // just to see if the loop is working.
}
我不需要陣列和載體來存儲這些變量,我有一聯結構。現在,我只需要一種方法來讀取文件並將這些字符串和整數存儲到變量中。 但它不工作,哈哈。不知道爲什麼。我也想過用函數getline,這樣的事情:
while(getline(infield, s)):
但是,是不是這本質上只是給了我一個大胖子線,所有的字符串和整數一起搗爛。
我不完全確定你是否可以在一行中做到這一點,但我會建議反對它。每讀入一個條目,都有可能出現錯誤(例如錯誤類型)。我想你會想要編寫檢查錯誤的代碼(或者至少是調試代碼)。此外,它並沒有在一個表達式中完成很多性能增益,而是在多個表達式中進行。 – Nard
將該文件格式作爲八列處理是您的方法的一大問題。有人會在那裏輸入像「Lee Harvey Oswald」或「Barrack Hussein Obama」這樣的名字來殺死你的節目。不,第一個名字和第二個名字之間沒有標籤是有原因的,原因是它們應該被認爲是一列。順便說一句,這也適用於紐黑文。順便說一句:文件格式家族被稱爲CSV,即使它是一個製表符而不是逗號,你應該在網上找到足夠的信息來解析它。 –