テキスト形式データファイルの読込み

解決


おやじ  2002-08-09 18:21:15  No: 1234

*.txt または*.csv 形式のファイルに数値データが、カンマ区切りで
3個づつ20組納まっているとして、これらを順次読み出して、実数の配列
a[i],b[i],c[i]に読み込みたいのですが。    VBのinput #1,a(i),b(i),c(i)
みたいなことはできないでしょうか。    現在はReadlnで一行づつ読み出し、
カンマで区切られている部分を順次切り出すというアホなことをやっています。


Lupin3rd  2002-08-09 18:56:44  No: 1235

カンマ区切りのファイルを使うならTStringListを使用するといいと思いますよ。
var
  SL:TStringList;
  SL2:TStringList;
  i:integer
begin
  SL.LoadFromFile('XXX.csv');
  for i := 0 to SL.count-1 do begin
      SL2.CommaText := SL[i];
      //SL2にアクセスするにはSL2[1]などとすることでアクセスできます
  end;
end;


おやじ  2002-08-09 20:10:42  No: 1236

Lupin3rdさん、早速の回答ありがとうございます。以下のコードでやって見ましたが、
LoadFromFileのところで、エラーが発生します。    どこかおかしいのでしょうか。
var
  SL:TStringList;
  SL2:TStringList;
  i:integer;
  nam:string;
begin
    OpenDialog1.Filter:='CSV File|*.txt';
    if opendialog1.Execute then
    begin
        nam:= OpenDialog1.FileName;
        SL.LoadFromFile(nam);//  ここで止まる
        for i := 0 to SL.count-1 do begin
            SL2.CommaText := SL[i];
    end;
  end;
end;
end.


にしの  2002-08-09 21:36:40  No: 1237

SLのオブジェクトが作成されていません。
こんな感じです。

var
  SL:TStringList;
  SL2:TStringList;
  i:integer;
  nam:string;
begin
// 下の2行を追加する
  SL := TStringList.Create;
  SL2 := TStringList.Create;

  OpenDialog1.Filter:='CSV File|*.txt';
  if opendialog1.Execute then
  begin
    nam:= OpenDialog1.FileName;
    SL.LoadFromFile(nam);//  ここで止まる
    for i := 0 to SL.count-1 do begin
      SL2.CommaText := SL[i];
    end;
  end;
end;


にしの  2002-08-09 21:37:06  No: 1238

まちがい。
最後のend;の前に、SL2.Free;SL.Free;を加えてください。


おやじ  2002-08-09 23:01:40  No: 1239

ありがとうございました。    エラー問題は解決しました。
しかし、おのおのの数値データを取り出すにはやっぱりSL[i]の中から
カンマで区切られたデータを自分で分離しないといけないのですね。


にしの  2002-08-10 02:53:01  No: 1240

違います。
SL2のCommaTextに入れた時点で、その文字列のカンマごとに改行されてSL2に入ります。
たとえば、

SL2.CommaText := 'aaa,bbb,ccc,ddd';

は、

SL2[0] := 'aaa';
SL2[1] := 'bbb';
SL2[2] := 'ccc';
SL2[3] := 'ddd';

と同等になります。


おやじ  2002-08-10 21:02:00  No: 1241

にしのさんへ。    分かりました。
とても助かりました。    早速やってみます。


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








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