新手發問:關於StringGrid讀取TXT檔的問題 |
尚未結案
|
seanyugx
一般會員 ![]() ![]() 發表:1 回覆:1 積分:0 註冊:2005-08-24 發送簡訊給我 |
各位先進好,小弟在練習stringgrid讀取文字檔中,以逗號作為讀進格子cell的練習,發現最後一格總是會跳行,在此將原程式碼PO上來:
procedure TForm1.BTN_DOTClick(Sender: TObject);
VAR FILENAME : STRING;
TF : TEXTFILE;
STR, S1 : STRING;
X, Y, I, J : INTEGER;
begin
GRID.RowCount := 1;
MEMO1.Lines.CLEAR;
FILENAME := FileListBox1.FileName;
IF FileExists(FILENAME) = TRUE THEN
BEGIN
AssignFile(TF,FILENAME);
RESET(TF);
X := 1;
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 );
GRID.Cells[Y-1,X-1] := S1;
INC(Y);
IF (POS(',',STR)<=0) THEN
BEGIN
GRID.Cells[Y,X] := STR;
BREAK;
END;
END;
GRID.RowCount := X;
INC(X);
END;
CloseFile(TF);
END ELSE BEGIN
SHOWMESSAGE('沒有此檔案!');
END;
end;
所後小弟將程式碼改成如下,發現倒數第二行會消失,但是如果TXT檔每一行的末端改成兩個逗號作結尾,卻又可以正常的顯示在格子中,百思不得其解,希望各位大大能夠解惑:
procedure TForm1.BitBtn2Click(Sender: TObject);
var
filename:string;
tf:textfile;
str, s1:string;
x,y,i,j:integer;
begin stringgrid1.RowCount:=1;
memo1.Lines.Clear;
filename:=filelistbox1.FileName; if fileexists(filename)=true then
begin
assignfile(tf,filename);
reset(tf);
x:=1;
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);
stringgrid1.Cells[y-1,x-1]:=s1; if (pos(',',str)<=0) then
begin
stringgrid1.Cells[y-1,x-1]:=str; //改為[y,x]後結果不變...why?
inc(y); //將原本的inc(y)在此先做判斷後在執行
break;
end;
inc(y);
end;
stringgrid1.RowCount:=x;
inc(x);
end;
closefile(tf);
end else begin
showmessage('no such file');
end; end;
|
borland_delphi70
中階會員 ![]() ![]() ![]() 發表:8 回覆:50 積分:51 註冊:2002-12-06 發送簡訊給我 |
procedure TForm1.BTN_DOTClick(Sender: TObject);
VAR FILENAME : STRING;
TF : TEXTFILE;
STR, S1 : STRING;
X, Y, I, J : INTEGER;
begin
GRID.RowCount := 1;
MEMO1.Lines.CLEAR;
FILENAME := FileListBox1.FileName;
IF FileExists(FILENAME) = TRUE THEN
BEGIN
AssignFile(TF,FILENAME);
RESET(TF);
X := 1;
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 );
GRID.Cells[Y-1,X-1] := S1;
INC(Y);
IF (POS(',',STR)<=0) THEN
BEGIN
GRID.Cells[Y,X] := STR;請使用相同座標規則,改為--->GRID.Cells[Y-1,X-1] := STR;
BREAK;
END;
END;
GRID.RowCount := X;
INC(X);
END;
CloseFile(TF);
END
ELSE
BEGIN
SHOWMESSAGE('沒有此檔案!');
END;
end;
^_^|||... 對我而言,程式設計是一場令人興奮又刺激的惡夢
|
seanyugx
一般會員 ![]() ![]() 發表:1 回覆:1 積分:0 註冊:2005-08-24 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |