全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2623
推到 Plurk!
推到 Facebook!

讀文字檔 , 宣告 buffer 太小造成當機問題

尚未結案
bruce0211
版主


發表:157
回覆:668
積分:279
註冊:2002-06-13

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-01-21 23:07:28 IP:218.174.xxx.xxx 未訂閱
以下為一典型讀文字檔範例 (比較高階的 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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-01-21 23:20:05 IP:61.221.xxx.xxx 未訂閱
引言: 以下為一典型讀文字檔範例 (比較高階的 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 你好: 請參考以下的連結做法
------
-- 若您已經得到滿意的答覆,請適時結案!! --
-- 欲知前世因,今生受者是;欲知來世果,今生做者是 --
-- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 --
系統時間:2024-04-26 8:26:24
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!