讀文字檔 , 宣告 buffer 太小造成當機問題 |
尚未結案
|
bruce0211
版主 發表:157 回覆:668 積分:279 註冊:2002-06-13 發送簡訊給我 |
以下為一典型讀文字檔範例
(比較高階的 C 語法)
但我發現若突然文字檔中有一行超過 buff 宣告長度(無可避免)
即會造成程式無窮 LOOP (CPU 滿載)
應該是 getline 讀不到 x0d x0a (Line Feed)的原因吧
請問各位長官有好的解決方法嗎 ?
(除了用 one by one 讀 byte 的方式) ifstream infile;
infile.open("C:\\TEST.TXT");
if (!infile) return; char buff[100];
String temp; while (!infile.eof())
{
infile.getline(buff,sizeof(buff));
temp=buff;
if (Trim(temp)=="") continue; //空行不處理並略過 ......
} 一般標準的文字檔資料都幾乎是固定長度
但總有例外會讀到一個因為不明原因未斷行特長的資料
(可能時產生檔案發生錯誤導致未正常斷行,下一行就連上來了)
為了這個問題我把 buffer 加大一倍
結果在某次又遇到一個更長的行數
所以火大,buffer 我都開 65535
在 Delphi 中是用 AnsiString 來讀行文字資料
所以從未遇過這個問題
只是我想...bcb 難道為了預防這種例外
都得開 65535 的 buffer 嗎 (也許那天會遇到超過 65535 的行長度)
|
RaynorPao
版主 發表:139 回覆:3622 積分:7025 註冊:2002-08-12 發送簡訊給我 |
引言: 以下為一典型讀文字檔範例 (比較高階的 C 語法) 但我發現若突然文字檔中有一行超過 buff 宣告長度(無可避免) 即會造成程式無窮 LOOP (CPU 滿載) 應該是 getline 讀不到 x0d x0a (Line Feed)的原因吧 請問各位長官有好的解決方法嗎 ? (除了用 one by one 讀 byte 的方式) ifstream infile; infile.open("C:\\TEST.TXT"); if (!infile) return; char buff[100]; String temp; while (!infile.eof()) { infile.getline(buff,sizeof(buff)); temp=buff; if (Trim(temp)=="") continue; //空行不處理並略過 ...... } 一般標準的文字檔資料都幾乎是固定長度 但總有例外會讀到一個因為不明原因未斷行特長的資料 (可能時產生檔案發生錯誤導致未正常斷行,下一行就連上來了) 為了這個問題我把 buffer 加大一倍 結果在某次又遇到一個更長的行數 所以火大,buffer 我都開 65535 在 Delphi 中是用 AnsiString 來讀行文字資料 所以從未遇過這個問題 只是我想...bcb 難道為了預防這種例外 都得開 65535 的 buffer 嗎 (也許那天會遇到超過 65535 的行長度)bruce0211 你好: 請參考以下的連結做法
------
-- 若您已經得到滿意的答覆,請適時結案!! -- -- 欲知前世因,今生受者是;欲知來世果,今生做者是 -- -- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 -- |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |