テキストファイル内のタブ区切りデータを配列に保存するには?

解決


ぽぽ  2003-11-01 01:36:00  No: 5542

テキストファイル内のタブ区切りデータを配列に保存する方法で質問があります.

テキストファイル内のタブ区切りデータの例として・・
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ループを自動で出るプログラムはできないでしょうか?


ぽぽ  2003-11-01 01:38:31  No: 5543

一部書き間違えてます.
誤)for j:=0 to m do
正)for j:=0 to m-1 do
です.


Halbow  2003-11-01 02:35:24  No: 5544

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;


にしの  2003-11-01 04:11:16  No: 5545

RowsがTStringsだったと思います。

    for igyou := 0 to Zenbu.Count-1 do begin
      Gyou.CommaText := Zenbu[igyou];
      StringGrid1.Rows(igyou).Assign(Gyou);
    end;
こんなかんじでもOKでは?
# 未確認です


Halbow  2003-11-01 05:54:58  No: 5546

Halbow です。

> RowsがTStringsだったと思います。

あ、そうですね。でも、質問者は配列に代入したいようなので、一般的に示すためわざわざ二つの TStringList を使ったのです。


ぽぽ  2003-11-01 23:05:06  No: 5547

Halbow様,にしの様,ありがとうございました.
どちらのやり方でもできました!


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加