掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
ファイルから配列データを動的配列への一括読み込み (ID:151249)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
新規プロジェクトでボタンを4つ置いてそれぞれにプログラムを書いてみました Button1 : 動的配列のサイズ決定とサンプルデータ作成 Button2 : 動的配列をファイルに書き込む 工夫してないので2~3秒 ファイルサイズ 1,954k Button3 : 動的配列にファイルから読み込む 工夫してないので2~3秒 Button4 : 動的配列にファイルから読み込む 正確に計測していないけど 処理時間は数マイクロ秒程度 普段はバイト単位なんで「PWordArray」を始めて使った これで良いのかはよく知らないがデータは読めた unit Unit1; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls; type TForm1 = class(TForm) Button1: TButton; Button2: TButton; Button3: TButton; Button4: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button4Click(Sender: TObject); private { Private 宣言 } Fwdata : Array of Array of Array of Word; public { Public 宣言 } end; var Form1: TForm1; implementation {$R *.dfm} // 動的配列のサイズ決定とサンプルデータ書き込み 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] := n; n := (n + 1) and $FFFF; end; end; end; end; // 動的配列をファイルに書き込む※工夫無し procedure TForm1.Button2Click(Sender: TObject); var fs : TFileStream; w : Word; 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 w := Fwdata[k,j,i]; fs.Write(w,SizeOf(w)); end; end; end; finally fs.Free; end; end; // 動的配列にファイルから読み込む※工夫無し procedure TForm1.Button3Click(Sender: TObject); var fs : TFileStream; w,w1,w2,w3 : Word; i,j,k: Integer; 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(w,SizeOf(w)); Fwdata[k,j,i] := w; end; end; end; finally fs.Free; end; Caption := 'Finish'; end; // 動的配列にファイルから読み込む※工夫あり procedure TForm1.Button4Click(Sender: TObject); var fs : TFileStream; w,w1,w2,w3 : Word; i,j,k,size,n: Integer; pWTbl : PWordArray; begin fs := TFileStream.Create('test.bin',fmOpenRead); try size := fs.Size; GetMem(pWTbl, size); fs.Position := 0; fs.Read(pWTbl[0], size); w1 := pWTbl[0]; w2 := pWTbl[1]; w3 := pWTbl[2]; SetLength( Fwdata, w1, w2, w3 ); n := 3; for k := 0 to w1-1 do begin for j := 0 to w2-1 do begin for i := 0 to w3-1 do begin w := pWTbl[n]; Fwdata[k,j,i] := w; Inc(n); end; end; end; finally fs.Free; end; Caption := 'Finish'; end;
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.