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

讀取TXT檔的小問題

尚未結案
心情之風
一般會員


發表:14
回覆:9
積分:4
註冊:2005-05-10

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-05-14 20:28:24 IP:218.175.xxx.xxx 未訂閱
請問一下.... 若是我在讀取TXT檔案到MEMO中 若是第一個字元碰到'.'的話就自動跳過此行 該用什麼語法去做 發表人 - 心情之風 於 2005/05/14 20:49:53
RedSnow
版主


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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-05-14 21:48:27 IP:218.19.xxx.xxx 未訂閱
心情之風 您好:    您想用什麼方式來讀取文字檔以及設給 Memo 物件?如果您要直接使用 Memo 物件的 LoadFromFile 來進行,那麼您僅能先將整個檔案載入,然後再對 Memo->Lines->Strings[i] 做檢查,以刪除行首含有指定字元的資料行了。    否則您就得先將檔案邊檢查邊載入到另一個暫存的物件或空間,然後再設給 Memo 物件,但是這樣的效率不見得會比較高,因此我還是建議您用前述的方式來處理,這裡給您一個範例供您參考:
AnsiString MyFile = "c:\\test.txt";
Memo1->Lines->BeginUpdate();    Memo1->Lines->LoadFromFile(MyFile);    for (int i=Memo1->Lines->Count-1; i>=0; i--) {
    if (Memo1->Lines->Strings[i].c_str()[0] == '.') {
        Memo1->Lines->Delete(i);
    }
}    Memo1->Lines->EndUpdate();
啊~抱歉,沒注意到您問的是 Delphi,我使用了 BCB 的 Code 寫範例,不過兩者差異不大,希望您能看得懂....。 發表人 - RedSnow 於 2005/05/14 21:51:06
RedSnow
版主


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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-05-14 22:25:00 IP:218.19.xxx.xxx 未訂閱
呵呵~剛才臨時抱佛腳,試著將前一篇寫的 BCB 範例改寫成 Delphi 的 Code,也不知道對不對?不過還是貼上來試試看好了。
VAR
    MyFile: String;
    i: Integer;
begin
    MyFile := 'c:\test.txt';        Memo1.Lines.BeginUpdate;        Memo1.Lines.LoadFromFile(MyFile);        for i := Memo1.Lines.Count-1 to 0 do
    begin
        if Copy(Memo1.Lines.Strings[i], 1, 1) = '.' then
            Memo1.Lines.Delete(i);
    end;        Memo1.Lines.EndUpdate;
end;
發表人 - RedSnow 於 2005/05/14 22:28:43
心情之風
一般會員


發表:14
回覆:9
積分:4
註冊:2005-05-10

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-05-15 07:27:34 IP:218.175.xxx.xxx 未訂閱
我成功嚕 雖然不是照你的方法寫 以下是我寫的方法 procedure TForm2.Button1Click(Sender: TObject); Var TF :TEXTFILE; Str :String; temp :string; Begin OpenDialog1.Execute; Edit1.Text := OpenDialog1.FileName; Try AssignFile(TF,Opendialog1.FileName); Reset(TF); Memo1.Lines.Clear; While not EOF(TF) Do Begin Readln(TF,STR); temp:=leftstr(STR,1); if temp ='.' then begin end else memo1.Lines.Add(STR); End; CloseFile(TF); except End; End; 不過還是很感謝你幫我想...
RedSnow
版主


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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-05-15 12:59:24 IP:219.137.xxx.xxx 未訂閱
心情之風 您好:    建議您無論使用那種方式來處理?最好還是在 Memo 物件內容做變更動作的前後分別加上 Memo1.Lines.BeginUpdate;Memo1.Lines.EndUpdate; 的敘述,這樣子效率會高一些。 誠如我前兩篇所講的,我對 Delphi 不熟悉,但是由您的程式中可以看出來,比對字串的第一個字元可用下列方式達成:
temp:=leftstr(STR,1);
if temp ='.' then
    ....
那麼您不妨將我原先那個判斷式修改如下:
VAR
    MyFile: String;
    temp : String;
    i: Integer;
begin
    MyFile := 'c:\test.txt';        Memo1.Lines.BeginUpdate;        Memo1.Lines.LoadFromFile(MyFile);        for i := Memo1.Lines.Count-1 to 0 do
    begin
        if Copy(Memo1.Lines.Strings[i], 1, 1) = '.' then
        temp := Memo1.Lines.Strings[i];
        if LeftStr(temp, 1) = '.' then
            Memo1.Lines.Delete(i);
    end;        Memo1.Lines.EndUpdate;
end;
同時您找一個大一點的文字檔來做測試,比較一下兩種方式運作的效率,看看何者比較能符合您的需求?
系統時間:2024-04-23 21:26:34
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!