*.txt または*.csv 形式のファイルに数値データが、カンマ区切りで
3個づつ20組納まっているとして、これらを順次読み出して、実数の配列
a[i],b[i],c[i]に読み込みたいのですが。 VBのinput #1,a(i),b(i),c(i)
みたいなことはできないでしょうか。 現在はReadlnで一行づつ読み出し、
カンマで区切られている部分を順次切り出すというアホなことをやっています。
カンマ区切りのファイルを使うなら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;
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.
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;
まちがい。
最後のend;の前に、SL2.Free;SL.Free;を加えてください。
ありがとうございました。 エラー問題は解決しました。
しかし、おのおのの数値データを取り出すにはやっぱりSL[i]の中から
カンマで区切られたデータを自分で分離しないといけないのですね。
違います。
SL2のCommaTextに入れた時点で、その文字列のカンマごとに改行されてSL2に入ります。
たとえば、
SL2.CommaText := 'aaa,bbb,ccc,ddd';
は、
SL2[0] := 'aaa';
SL2[1] := 'bbb';
SL2[2] := 'ccc';
SL2[3] := 'ddd';
と同等になります。
にしのさんへ。 分かりました。
とても助かりました。 早速やってみます。
ツイート | ![]() |