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

如何快速載入大檔案

缺席
seeing
初階會員


發表:49
回覆:131
積分:41
註冊:2002-11-07

發送簡訊給我
#1 引用回覆 回覆 發表時間:2008-01-04 12:42:26 IP:60.250.xxx.xxx 訂閱
請問要如何快速載入大檔案,檔案大小約20 MB,要將檔案載入到 ListBox,資料格式是座標資料。
謝謝
Stallion
版主


發表:52
回覆:1600
積分:1995
註冊:2004-09-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2008-01-04 15:23:00 IP:75.42.xxx.xxx 未訂閱
Check out TStringList.LoadFromFile and ListBox.Items.AddStrings then the answer is comming out !
===================引 用 seeing 文 章===================
請問要如何快速載入大檔案,檔案大小約20 MB,要將檔案載入到 ListBox,資料格式是座標資料。
謝謝
seeing
初階會員


發表:49
回覆:131
積分:41
註冊:2002-11-07

發送簡訊給我
#3 引用回覆 回覆 發表時間:2008-01-04 16:01:31 IP:60.250.xxx.xxx 訂閱
您好:
小弟目前是這樣做的
[code cpp]
TStringList *filelist = new TStringList;
filelist->LoadFromFile(OpenDialog1->FileName);

int count = filelist->Count;

for(int i=0; i ListBox1->Items->Add(filelist->Strings[i]);

delete filelist;

[/code]
總行數約有 1,080,000 行
Stallion
版主


發表:52
回覆:1600
積分:1995
註冊:2004-09-15

發送簡訊給我
#4 引用回覆 回覆 發表時間:2008-01-04 16:33:58 IP:75.18.xxx.xxx 未訂閱
Try this to see if it gets better...

try
{

TStringList *filelist = new TStringList;
filelist->LoadFromFile(OpenDialog1->FileName);
ListBox1->Items->AddStrings(filelist);
}
__finally
{
delete filelist;
}
編輯記錄
Stallion 重新編輯於 2008-01-04 16:35:44, 註解 無‧
seeing
初階會員


發表:49
回覆:131
積分:41
註冊:2002-11-07

發送簡訊給我
#5 引用回覆 回覆 發表時間:2008-01-04 16:56:02 IP:60.250.xxx.xxx 訂閱
您好:
小弟有試過用 ListBox1->Items->Assign(filelist); 但是一樣很慢。
我回去再試試看用
ListBox1->Items->AddStrings(filelist); 看會不會比較快,謝謝您的回覆!
暗黑破壞神
版主


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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2008-01-04 18:13:51 IP:61.225.xxx.xxx 未訂閱
理論上。要在那種元件搞上20M 的東西。在載入時,都快不到那邊去。
你自己去追它的 source code 就知道它加一筆資料時,做多少事。
算一下就知道它花那些時間。是合理的。

要真的改掉這個問題。
你得自己改寫元件。^^
seeing
初階會員


發表:49
回覆:131
積分:41
註冊:2002-11-07

發送簡訊給我
#7 引用回覆 回覆 發表時間:2008-01-04 21:21:14 IP:203.79.xxx.xxx 訂閱
那請問有什麼方法可以改進載入檔案的效率?(用記事本開反而不會太久)
編輯記錄
seeing 重新編輯於 2008-01-04 21:27:05, 註解 無‧
lijenyun
一般會員


發表:3
回覆:19
積分:9
註冊:2003-06-22

發送簡訊給我
#8 引用回覆 回覆 發表時間:2008-01-08 18:47:21 IP:59.104.xxx.xxx 訂閱
try

LstistBox1->Items->BeginUpdate();
LstistBox1->LoadFromFile(OpenDialog1->FileName);
LstistBox1->Items->EndUpdate()();

seeing
初階會員


發表:49
回覆:131
積分:41
註冊:2002-11-07

發送簡訊給我
#9 引用回覆 回覆 發表時間:2008-01-09 08:45:12 IP:60.250.xxx.xxx 訂閱

[code cpp]
LstistBox1->Items->BeginUpdate();
LstistBox1->LoadFromFile(OpenDialog1->FileName);
LstistBox1->Items->EndUpdate()();

[/code]

還是很慢,不過還是謝謝您

小弟目前是用底下的方式來分段顯示,以免感覺要等太久
[code cpp]
if(OpenDialog1->Execute())
{
ListBox1->Clear();

TStringList *filelist = new TStringList;
TStringList *shortfilelist = new TStringList;
filelist->LoadFromFile(OpenDialog1->FileName);

int count = filelist->Count;
CGauge1->MaxValue = count;

for(int i=1; i<=count; i )
{
shortfilelist->Add(filelist->Strings[i-1]);

if(i % 1000 == 0)
{
ListBox1->Items->AddStrings(shortfilelist);
shortfilelist->Clear();
}
CGauge1->Progress ;
}
ListBox1->Items->AddStrings(shortfilelist);

CGauge1->Progress = 0;

delete shortfilelist, filelist;
}

[/code]

正在考慮用
Scintilla的元件來試試(http://delphisci.sourceforge.net/)
編輯記錄
seeing 重新編輯於 2008-01-09 10:14:52, 註解 無‧
系統時間:2024-05-07 22:08:59
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!