掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
配列の書き込みと読み込みについての質問です。 (ID:48441)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
pTPerson = ^TPerson; TPerson = record Age : Integer; Name: AnsiString[30]; end; TPersonArray = array of TPerson; //動的レコード型配列書込 procedure TForm1.FileSave(fName: AnsiString) var i,j: Integer; buf: array[1..16] of AnsiChar; //buf :AnsiString[16]; ではダメらしい Fs : TFileStream; R : TPersonArray; begin SetLength(R, 100); //配列のサイズを決定 for i := 0 to 99 do begin R[i].Age := Random(100); for j := 1 to 16 do buf[j] := Chr( Random(26)+97 ); //buf :AnsiString[16]; ではどういうわけか buf[j] が文字にならない! R[i].Name := 'Stream '+buf; end; Fs := TFileStream.Create(fName,fmCreate); try Fs.Write(R[0], SizeOf(TPerson)*Length(R)); //Length(R)で配列要素数がわかる //配列名は先頭アドレスを示すはずだが //Fs.Write(R, SizeOf(TPerson)*Length(R)); //ではダメである。なぜ? finally Fs.Free; end; end; //動的レコード型配列読込 procedure TForm1.FileLoad(fName: AnsiString); var i,L: Integer; Fs : TFileStream; R : TPersonArray; begin Fs := TFileStream.Create(fName,fmOpenRead or fmShareExclusive); try L := Fs.Size div SizeOf(TPerson); //L = 配列要素数 SetLength(R, L); Fs.Read(R[0], Fs.Size); //Fs.Read(R, Fs.Size); ではダメ! for i := 0 to L-1 do Memo1.Lines.Add( Format('%2d',[ R[i].Age ])+' '+R[i].Name); finally Fs.Free; end; end; ------------------------------------------------------- FileSave で Fs.Write(R, SizeOf(TPerson)*Length(R)); FileLoad で Fs.Read(R, Fs.Size); とした場合ダメなのはなぜでしょうか?
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.