如何正確讀取.txt檔? |
答題得分者是:cmj
|
mathewzhao
中階會員 發表:121 回覆:164 積分:67 註冊:2003-04-04 發送簡訊給我 |
各位先進好!
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 發送簡訊給我 |
你好:
如果你確定是純文字檔,你可以直接使用 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 發送簡訊給我 |
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 發送簡訊給我 |
依你程式修改如下參考看看
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 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |