論理型のはいれつをファイルに保存する際、
文字列型に0と1で記していましたが、
文字列型では255進数なので無駄なような気がしました
良い方法は有りますか?
ビットごとに保存すればよろしいのでは?
要素8個分を1バイトとして保存し、最後に端数が出る場合には最大7ビットのダミーデータを入れて保存します。
要素数が不定であれば、先頭に配列数を書いておけば、ダミーを追加しても問題ありません。
難しいです
配列の要素の数は決まってます
とりあえずTBits調べてみます
編集 削除無駄というか、Boolean 型の変数は1バイトなので、サイズは
'0' と '1' の文字にしても同じですが、書き込み・読み出しの
効率は悪いですね。配列そのものをメモリーストリームをつかって
読み書きすると簡単です。
procedure TForm1.Button1Click(Sender: TObject);
var
bl:array[0..9] of Boolean;
i:integer;
ms:TMemoryStream;
begin
ms := TMemoryStream.Create;
try
for i := 0 to 9 do bl[i] := Odd(i);
ms.Write(bl,SizeOf(Boolean)*10);
ms.SaveToFile('c:\Bool.bin');
finally
ms.Free;
end;
end;
これは書き込みの例です。読み出しは
procedure TForm1.Button2Click(Sender: TObject);
var
bl:array[0..9] of Boolean;
i:integer;
ms:TMemoryStream;
begin
ms := TMemoryStream.Create;
try
ms.LoadFromFile('c:\Bool.bin');
ms.Read(bl,SizeOf(Boolean)*10);
for i := 0 to 9 do
if bl[i] then
Memo1.Lines.Add('odd')
else
Memo1.Lines.Add('even');
finally
ms.Free;
end;
end;
のようにします。
Thank You.
編集 削除