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

如何正確讀取.txt檔?

答題得分者是:cmj
mathewzhao
中階會員


發表:121
回覆:164
積分:67
註冊:2003-04-04

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-07-04 10:24:40 IP:219.145.xxx.xxx 未訂閱
各位先進好! Q: 我有一個‧txt檔,如下列格式: 123;12345;1234 321;54321;4321 我想在每行以';'分隔取出三段內容(123,12345,1234)放到一個array中,然後再處理,但是每次只能正確的取第一行,code如下: var TF:textFile; str,s1:string; y,j:integer; strarr: array[1..9] of string ; .... const Filename:='123.txt'; .... if FileExists(Filename)=true then begin assignfile(TF,Filename); reset(TF); while not Eof(TF) do begin readln(TF,str); y:=1; while trim(str)<>'' do begin j:=pos(';',str); s1:=copy(str,1,J-1); str:=copy(str,J 1,Length(str)-j); strarr[y]:=s1; showmessage(s1); inc(Y); if (pos(';',str)<=0) then begin strarr[y]:=str; showmessage(str); end; end; end; closefile(TF); end;
ha0009
版主


發表:16
回覆:507
積分:639
註冊:2002-03-16

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-07-04 11:00:07 IP:61.30.xxx.xxx 未訂閱
你好: 如果你確定是純文字檔,你可以直接使用 TStringsList 來讀取該檔,並以 text 來處理字串。 下列的程式碼供你參考 < class="code"> procedure TForm1.Button5Click(Sender: TObject); var s : TStrings; begin s := TStringList.Create; try s.LoadFromFile ('c:\test.txt'); split (s.text, ';', memo1.Lines); finally FreeAndNil (s); end; end; procedure split (Expression, delimiter : String; Params : TStrings); var index : integer; begin Expression := Trim (Expression); Params.Clear; if delimiter = '' then Params.Add (Expression); if Expression = '' then system.Exit; index := pos (delimiter, Expression); if index = 0 then Params.Add (trim (Expression)) else begin while true do begin index := pos (delimiter, Expression); if index = 0 then begin Params.Add (Trim (Expression)); break; end; Params.Add (Trim (copy (Expression, 1, index - 1))); Expression := trim (Copy (Expression, Index length (delimiter), Length (Expression))); end; end; end;
mathewzhao
中階會員


發表:121
回覆:164
積分:67
註冊:2003-04-04

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-07-04 11:56:17 IP:202.100.xxx.xxx 未訂閱
Hi,ha0009   剛才我參考前輩給的方法,確實能以';'將每行內容分別取出,如圖所示:    但是並沒有放到array中,我分別取出的目的是準備 Upload 資料庫, 例如:在第一行取出三段內容,放到: strarr[1]:='123'; strarr[2]:='12345'; strarr[3]:='1234'; 然後再: adoquery1‧sql‧Add('Insert Into std'); adoquery1‧sql‧add('(name,'); adoquery1‧sql‧add('ID,'); adoquery1‧sql‧add('gender'); adoquery1‧sql‧add(') values ('); adoquery1‧sql‧add(' '''+strarr[1]+''','); adoquery1‧sql‧add(' '''+strarr[2]+''', '); adoquery1‧sql‧add(' '''+strarr[3]+''') '); adoquery1‧execsql; 如果依前輩給的方法,晚輩能力有限不知如何upload 資料庫, 還望前輩指導,謝謝! 發表人 - mathewzhao 於 2003/07/04 11:58:27
cmj
高階會員


發表:15
回覆:242
積分:226
註冊:2002-06-12

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-07-04 12:06:49 IP:211.76.xxx.xxx 未訂閱
依你程式修改如下參考看看
procedure TForm1.Button1Click(Sender: TObject);
var TF:textFile;
    str,s1:string;
    y,j:integer;
    strarr: array[1..9] of string ;
    FileName:String;
begin
  Filename:='123.txt';
  if FileExists(Filename)=true then
   begin
     assignfile(TF,Filename);
     reset(TF);         while not Eof(TF) do
      begin
        readln(TF,str);
        y:=1;
        While True do
         begin
           j:=pos(';',str);
           if j=0 then
              s1:=Str
           else
            begin
              s1:=copy(str,1,J-1);
              Delete(str,1,j);
            end;
showmessage(inttostr(y) ',' s1);
           strarr[y]:=s1;
           if j=0 then Break;
           Inc(y);
         end;
      end;
     closefile(TF);
   end;
end;    
ha0009
版主


發表:16
回覆:507
積分:639
註冊:2002-03-16

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-07-04 12:09:02 IP:61.30.xxx.xxx 未訂閱
你好: TStrings 的好處在它可自行取得與釋放用到的儲存空間(字串),你可以使用 Strings 屬性來取得內容,用 Count 得知存放數量。在動態記憶體使用非常方便。如果你依然想使用 array 來儲存,你可自行修改 split 程序 你可以將 >
系統時間:2024-04-30 4:25:30
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!