作者bamboopole (ㄈㄓ肥竹)
看板C_and_CPP
標題[問題] getline讀檔案多一行
時間Fri Oct 27 22:05:42 2023
以下是我的程式碼
std::ifstream file(dataset);
std::vector<std::vector<std::string>> dataString;
std::string line = "";
while(getline(file, line)){
std::vector <std::string> vec;
boost::algorithm::split(vec, line, boost::is_any_of(delimeter));
dataString.push_back(vec);
}
file.close();
圖片是我讀的檔案的最後端
https://i.imgur.com/2IJwDNB.jpg
檔案總行數是32563,最後兩行是空白的
我使用getline來讀檔
但我發現我讀出來的vector長度是32562
然後如果我把讀的檔案的最後兩個空白行刪掉,結果又是正確的32561
想請問為什麼會有這個三個數字的差異
-----
Sent from JPTT on my iPad
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 61.70.63.65 (臺灣)
※ 文章網址: https://webptt.com/m.aspx?n=bbs/C_and_CPP/M.1698415544.A.C32.html
1F:→ Richun: 你檔案用wc -l顯示的也是32563嗎?10/27 22:28
顯示32562 跟原檔getline得到的一樣
2F:→ nh60211as: 你有試過只多一行嗎10/27 22:40
只多一行是32561 是正確的
※ 編輯: bamboopole (61.70.63.65 臺灣), 10/27/2023 22:53:41
※ 編輯: bamboopole (61.70.63.65 臺灣), 10/27/2023 22:54:43
3F:→ nh60211as: 你對正確的定義怪怪的。getline是去讀換行符號來分出10/27 23:03
4F:→ nh60211as: 一個line是什麼,所以就算是沒有內容的line也是一個li 10/27 23:03
5F:→ nh60211as: ne10/27 23:03
6F:→ nh60211as: 然後你去看cppreference的話可以看到getline的終止條10/27 23:05
7F:→ nh60211as: 件是什麼,去比對一下你的輸入應該就可以知道行為正不10/27 23:05
8F:→ nh60211as: 正確了10/27 23:05
9F:推 wulouise: 先把最後兩行用什麼換行符號列出來10/28 00:27
10F:→ longlongint: 編輯器空行的屁股沒有換行符號 所以要少算一行10/28 10:34
11F:→ longlongint: 應該是說 空行那行什麼都沒有…10/28 10:34
感謝各位,我懂了
倒數第二行有換行符號,所以才會出現32563行
而最後一行沒有換行符號,所以是直接結束
※ 編輯: bamboopole (180.217.202.238 臺灣), 10/28/2023 11:36:29