テキストファイル内のタブ区切りデータを配列に保存する方法で質問があります.
テキストファイル内のタブ区切りデータの例として・・
1 11 111
2 22 222
3 33 333
・ ・ ・
・ ・ ・
のようなn行3列のデータを読み込むプログラムはできたのですが,
AssignFile(ltf,fn); //lft:textFile,fn:String;
Reset(lft);
i:=0; //i,j,n,m:Integer;
m=:3;
while not Eof (ltf) do
begin
for j:=0 to m do
read(ltf,Data[i,j]); //Data:array [0..1000,0..20] of Real:
i:=i+1;
end;
CloseFile(ltf);
n行m列のデータを読み込ませたいのです.
textの行送りでforループを自動で出るプログラムはできないでしょうか?
一部書き間違えてます.
誤)for j:=0 to m do
正)for j:=0 to m-1 do
です.
Halbow です。
> n行m列のデータを読み込ませたいのです.
> textの行送りでforループを自動で出るプログラムはできないでしょうか?
TStringList を使えば行単位でアクセスできます。また、コンマ区切りや
タブ区切りの文字列を分解することもできます。以下の例では、タブ区切り
の文字列を、二つの TStringList を使って、行単位にアクセスする
Zenbu と、一行のタブ区切りの文字列を分解する Gyou をつかって
StringGrid に表示しています。
procedure TForm1.Button1Click(Sender: TObject);
var
Zenbu,Gyou:TStringList;
igyou,iretsu:integer;
begin
Zenbu := TStringList.Create;
Gyou := TStringList.Create;
try
Zenbu.LoadFromFile('D:\usr\Test.dat');
for igyou := 0 to Zenbu.Count-1 do begin
Gyou.CommaText := Zenbu[igyou];
for iretsu := 0 to Gyou.Count-1 do
StringGrid1.Cells[iretsu,igyou] := Gyou[iretsu];
end;
finally
Zenbu.Free;
Gyou.Free;
end;
end;
RowsがTStringsだったと思います。
for igyou := 0 to Zenbu.Count-1 do begin
Gyou.CommaText := Zenbu[igyou];
StringGrid1.Rows(igyou).Assign(Gyou);
end;
こんなかんじでもOKでは?
# 未確認です
Halbow です。
> RowsがTStringsだったと思います。
あ、そうですね。でも、質問者は配列に代入したいようなので、一般的に示すためわざわざ二つの TStringList を使ったのです。
Halbow様,にしの様,ありがとうございました.
どちらのやり方でもできました!
ツイート | ![]() |