※ 引述《streit.bbs@aeug.twbbs.org (亞斯爾‧馮‧修特萊)》之銘言:
> 剛修改了一下....跟clock的關係不大
> 反而是前面的版友說的根GUI 有關...
> 現在用file跟每千筆才秀一次紀錄後 速度明顯提升非常多...
> 每千筆約差30~40左右....所以應該是gui造成的...
我隨便寫了一個程式測試一下,61萬筆資料大概10秒多一點。
不過我的電腦應該比你的快。Pentium4 3GHz. 1GB ram.
void __fastcall TForm1::Button1Click(TObject *Sender)
{
struct _SrcData {
char CallerID[256];
char CalleeID[256];
time_t StartTime;
time_t EndTime;
time_t Seconds;
void *Next;
} SrcData;
char tmp[256];
struct tm tmStart;
struct tm tmEnd;
int count;
int bad;
int tmp2;
int ret;
FILE *fp;
bad = 0;
count = 0;
fp = fopen("d:\\xxx.log", "r");
if (fp == NULL)
{
ShowMessage("Cannot open file");
return;
}
while(!feof(fp))
{
ret =
fscanf(
fp,
"%20s %20s %30s %04d%02d%02d-%02d%02d%02d %04d%02d%02d-%02d%02d%02d %07d",
SrcData.CallerID,
SrcData.CalleeID,
tmp,
&tmStart.tm_year,
&tmStart.tm_mon,
&tmStart.tm_mday,
&tmStart.tm_hour,
&tmStart.tm_min,
&tmStart.tm_sec,
&tmEnd.tm_year,
&tmEnd.tm_mon,
&tmEnd.tm_mday,
&tmEnd.tm_hour,
&tmEnd.tm_min,
&tmEnd.tm_sec,
&tmp2);
if(ret != 16)
{
++bad;
continue;
}
SrcData.StartTime = mktime(&tmStart);
SrcData.EndTime = mktime(&tmEnd);
SrcData.Seconds = tmp2;
if(count % 1000)
{
ProgressBar1->Position = 100 *(float(count) / 610000);
}
++count;
}
fclose(fp);
Edit1->Text = AnsiString("GOOD: ") + IntToStr(count);
Edit2->Text = AnsiString("BAD: ") + IntToStr(bad);
}
--
Gary W. Lee
URL: http://www.dev.idv.tw/
A web site about C/C++, Tcl, Python, wxWidgets, UNIX/Linux, Windows ..., etc.
--
※ Origin: 元智大學 風之塔 <bbs.yzu.edu.tw>
※ From : 59-112-232-40.dynamic.hinet.net
※ X-Info: Re: 檔案分析問題 如何提升資料解析速度
※ X-Sign: 11SH53MggJL/t9cqY/M. (06/01/14 14:04:38 )