掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
ファイルから配列データを動的配列への一括読み込み (ID:151254)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
>ファイルには様々な型のデータが混在しています 他の人からも指摘あると思いますが サンプルが三次元Wordの動的配列なので それ前提で回答しておられます 追加要素を後出しされるとつらい その様々な型のデータを混在ってところを説明しないと 回答は得られないと思います 混在ということなのでレコード型にしてみました 動的配列のレコード型に様々なデータを持たせて それを書き込むサンプルです 3分で作ったので細かいところは適当です ※レコード型の初期化を忘れた 要は 動的三次元配列は連続したメモリにない?ので じゃあ一次元配列なら連続してるんじゃね? ということで作ってみました これ以上追加情報が来るときつい と思って検索したら このときの質問の続きですよね? https://www.petitmonte.com/bbs/answers?question_id=29967 回答の返事がないからそこで止まってるだけ 最初からわかってたらわざわざサンプル作らなかったのに・・・ ボツにするのは勿体ないのでサンプルほい 【追加】 type TRec = record DataWord : Word; DataSingle: Single; end; 【修正】 { Private 宣言 } Fwdata : Array of Array of Array of TRec; // 動的配列のサイズ決定とサンプルデータ書き込み procedure TForm1.Button1Click(Sender: TObject); var i,j,k,n: Integer; begin SetLength( Fwdata, 100, 100, 100 ); n := 0; for k := 0 to 99 do begin for j := 0 to 99 do begin for i := 0 to 99 do begin Fwdata[k,j,i].DataWord := n; Fwdata[k,j,i].DataSingle := n / 100; n := (n + 1) and $FFFF; end; end; end; end; // 動的配列をファイルに書き込む※工夫無し procedure TForm1.Button5Click(Sender: TObject); var fs : TFileStream; w : Word; s : Single; r : TRec; i,j,k: Integer; begin fs := TFileStream.Create('test.bin',fmCreate); try w := 100; fs.Write(w,SizeOf(w)); fs.Write(w,SizeOf(w)); fs.Write(w,SizeOf(w)); for k := 0 to 99 do begin for j := 0 to 99 do begin for i := 0 to 99 do begin //r := Fwdata[k,j,i]; fs.Write(Fwdata[k,j,i],SizeOf(TRec)); end; end; end; finally fs.Free; end; end; // 動的配列にファイルから読み込む※工夫無し procedure TForm1.Button6Click(Sender: TObject); var fs : TFileStream; w,w1,w2,w3 : Word; r : TRec; i,j,k,size,n: Integer; pWTbl : PWordArray; begin fs := TFileStream.Create('test.bin',fmOpenRead); try fs.Read(w1,SizeOf(w1)); fs.Read(w2,SizeOf(w2)); fs.Read(w3,SizeOf(w3)); SetLength( Fwdata, w1, w2, w3 ); for k := 0 to w1-1 do begin for j := 0 to w2-1 do begin for i := 0 to w3-1 do begin fs.Read(r,SizeOf(r)); Fwdata[k,j,i] := r; end; end; end; finally fs.Free; end; Caption := 'Finish'; end; // 動的配列にファイルから読み込む※工夫あり procedure TForm1.Button7Click(Sender: TObject); var fs : TFileStream; w,w1,w2,w3 : Word; r : TRec; i,j,k,size,n: Integer; pWTbl : array of TRec; begin fs := TFileStream.Create('test.bin',fmOpenRead); try fs.Read(w1,SizeOf(w1)); fs.Read(w2,SizeOf(w2)); fs.Read(w3,SizeOf(w3)); SetLength( Fwdata, w1, w2, w3 ); size := w1 * w2 * w3; //GetMem(pWTbl, size); SetLength(pWTbl,size); fs.Read(pWTbl[0], size); n := 0; for k := 0 to w1-1 do begin for j := 0 to w2-1 do begin for i := 0 to w3-1 do begin Fwdata[k,j,i] := pWTbl[n]; Inc(n); end; end; end; finally fs.Free; end; Caption := 'Finish'; end;
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.