線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2128
推到 Plurk!
推到 Facebook!

如何讀文字檔案,從中間一段到檔尾

尚未結案
a120803
初階會員


發表:61
回覆:66
積分:25
註冊:2003-03-12

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-09-14 08:40:48 IP:140.112.xxx.xxx 未訂閱
請問大大: 如何讀文字檔案,從中間一段到檔尾 例如一個CSV文字檔案有10萬行,我想取得第10行至第10萬行的資料 我想要一次讀完整個檔案,不想要一行行讀進來 讀完整個檔案後再把它存入陣列內
李國維
高階會員


發表:42
回覆:287
積分:235
註冊:2003-02-07

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-09-14 15:34:09 IP:219.84.xxx.xxx 未訂閱
a120803: 可以使用TStringList. 範例
TStringList *SLTmp = new TStringList();
SLTmp->LoadFromFile("C:\\123.csv");
//SLTmp->Count表示總行數
for (int i= 10 ; i < SLTmp->Count ; i   )
{
 //SLTmp->Strings[i] 表示第i行的資料
 ListBox1->Items->Add(SLTmp->Strings[i]);
}    delete SLTmp;
a120803
初階會員


發表:61
回覆:66
積分:25
註冊:2003-03-12

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-09-16 08:20:27 IP:140.112.xxx.xxx 未訂閱
謝謝 可是我不想要一行一行讀進來,因為這樣花的時間太慢了 我想要將第10行至第100000行的資料當作一個block,一次讀進來
暗黑破壞神
版主


發表:9
回覆:2301
積分:1627
註冊:2004-10-04

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-09-16 08:54:13 IP:61.59.xxx.xxx 未訂閱
如果你每一行的長度是固定的。 那你當然可以這樣做。 不然除了一行一行讀進來再處理之外。 就是要先在檔案中把每一行的第一個 byte 的位置做成像 index 的東西。 這樣就可以很快的”跳到”第N行。
a120803
初階會員


發表:61
回覆:66
積分:25
註冊:2003-03-12

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-09-19 13:58:01 IP:140.112.xxx.xxx 未訂閱
謝謝大大 但是可不可以先將檔案以二進位的型式全部讀入記憶體 然後再把二進位資料轉換為文字 可是不知道如何寫
RedSnow
版主


發表:79
回覆:1322
積分:845
註冊:2003-12-15

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-09-19 17:27:03 IP:61.230.xxx.xxx 未訂閱
a120803 您好:
引言:可是我不想要一行一行讀進來,因為這樣花的時間太慢了 我想要將第10行至第100000行的資料當作一個block,一次讀進來
您大概沒有仔細的去看 李國維 所提供的範例,他提供的作法已經是一次性讀取的作法了。
引言:但是可不可以先將檔案以二進位的型式全部讀入記憶體 然後再把二進位資料轉換為文字 可是不知道如何寫
如果您可以接受上述您自己所提的繁瑣作法,那麼您為何不能接受使用 TStringList 來讀取檔案的作法?TStringList 讀取檔案後,讀入的資料就已經是以文字資料行的型態存在字串陣列中了,這樣子不是正好符合您的需求嗎?若想剔除前 9 行的資料,就使用 StringList 提供的 Delete 函式刪除掉便是,這樣子來進行後續處理的方式不會比較差吧? 7 天天敲鍵盤 v 時時按滑鼠 8
李國維
高階會員


發表:42
回覆:287
積分:235
註冊:2003-02-07

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-09-19 18:12:50 IP:219.84.xxx.xxx 未訂閱
a120803: 我想RedSnow大大已經解釋的很清楚了.我個人是覺得寫程式有很多方法.如果你想用很複雜的寫法這是不為過的.但是你也可以思考用更簡單更快速的方法來達到你想要的功能.不是嗎?千萬不要鑽牛角尖.
a120803
初階會員


發表:61
回覆:66
積分:25
註冊:2003-03-12

發送簡訊給我
#8 引用回覆 回覆 發表時間:2005-10-03 13:28:17 IP:140.112.xxx.xxx 未訂閱
謝謝大大 可是我只能用Ansi C來寫 也就是只能用fopen fclose fread fwrite等函數 我無法使用TStringList等VCL所提供的物件
RedSnow
版主


發表:79
回覆:1322
積分:845
註冊:2003-12-15

發送簡訊給我
#9 引用回覆 回覆 發表時間:2005-10-03 18:04:27 IP:61.230.xxx.xxx 未訂閱
引言:謝謝大大 可是我只能用Ansi C來寫 也就是只能用fopen fclose fread fwrite等函數 我無法使用TStringList等VCL所提供的物件
我覺得 a120803 你這麼寫實在令人納悶,由你的註冊日期以及五十多筆發問資料來看,你並不是新進會員,應該不會在不適當的討論區發問才對,而且你問的大都是與 BCB 及 Delphi 有關的問題: 會員 a120803 發問的文章明細 http://delphi.ktop.com.tw/MyQuestion.asp?M_ID=8527&M_NAME=a120803 尤其是其中的這一篇: 引用元件 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=44646 在上述這一篇裡面,你開宗明義的就寫道:"本人有BCB 5.0 professional及Delphi 7 Enteprise兩套軟體",而且你這篇發問是張貼在 "C++程式語言討論區(C++Builder)" 這一區裏面,如果你是問 C 的問題,那麼你應該是要到 "其它程式語言討論區" (目前開放QB C ASM) 去發問才對。 你在本篇的一開始也未表明僅能使用 ANSI C 的環境,就算你一開始時是忘記註明好了,但是在李國維會員提供範例給你之後,你就應該要即時表明,但是你的回覆是 "可是我不想要一行一行讀進來,因為這樣花的時間太慢了",顯然你對李國維會員提供的範例使用了 StringList 並無意見,只是你自己對 StringList 不熟悉,所以會做前述的錯誤回應,那麼你又為何會突然在前一篇裡面變成了 "只能用Ansi C來寫" 這種狀況? 請你正式澄清一下,你到底是在詢問何種開發環境下的問題? 7 天天敲鍵盤 v 時時按滑鼠 8 發表人 - RedSnow 於 2005/10/03 18:09:36
李國維
高階會員


發表:42
回覆:287
積分:235
註冊:2003-02-07

發送簡訊給我
#10 引用回覆 回覆 發表時間:2005-10-03 18:30:02 IP:219.84.xxx.xxx 未訂閱
a120803: 這各論壇是提供做為程式交流用的.所以在提出問題前仔細思考一下問題的所在.並詳細的描述問題.不但對你好.也不會耽誤善心人士的時間.畢竟不是每個人都一定要解答你的疑問.
a120803
初階會員


發表:61
回覆:66
積分:25
註冊:2003-03-12

發送簡訊給我
#11 引用回覆 回覆 發表時間:2005-10-04 18:16:43 IP:140.112.xxx.xxx 未訂閱
謝謝大大 因為我不知道使用TStringList所寫的程式 在其他電腦上執行,是不是要安裝其他Library 所以為了普及性,才想用最原始不用VCL來寫
李國維
高階會員


發表:42
回覆:287
積分:235
註冊:2003-02-07

發送簡訊給我
#12 引用回覆 回覆 發表時間:2005-10-04 20:04:48 IP:218.167.xxx.xxx 未訂閱
a120803: 只要按照一般的製作安裝程序就可不需要另行安裝library borlandmm.dll跟cc3260mt.dll這兩個檔案是必備的
a120803
初階會員


發表:61
回覆:66
積分:25
註冊:2003-03-12

發送簡訊給我
#13 引用回覆 回覆 發表時間:2005-10-08 07:59:59 IP:140.112.xxx.xxx 未訂閱
謝謝大大 那請問TStringList如何將整個文字檔全部讀入ㄋ 原理是什麼
系統時間:2024-05-03 15:07:33
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!