私はLazarusを使用してFreePascalを学習しようとしていますが、私のペットプロジェクトの1つは、テキストまたはASCII関連の手順を使用して読み取ったり表示したりできない(メモボックスなどに直接出力できない)タイプされていないファイルの特定のセットの64バイトヘッダーを読み取ることです。 )。
これまでのところ、ヘッダーの64バイトを読み取る次のコードを考案しました。これを行うには、Lazarus IRCを介して受け取ったアドバイスに基づいて、TStreamsと[ディレクトリの選択]ダイアログボックスを使用しています。私の質問は、ヘッダーからバッファーに読み込まれたデータを実際にどのように使用するかです。たとえば、ヘッダーには、8バイト、16バイト、2バイトなどのシーケンスがあり、「作業」して他の出力を生成し、最終的に文字列に変換して文字列グリッドに入れます。 。
私がこれまでに持っているもののいくつかは、終わり近くにメイソンウィーラーによって書かれたここで見つけたものに基づいています(http://stackoverflow.com/questions/455790/fast-read-write-from-file-in-delphi)が、それは読み方のみを示しており、使用方法は示していません。私もこれを読みました(http://stackoverflow.com/questions/4309739/best-way-to-read-parse-a-untyped-binary-file-in-delphi)が、データを読み取る方法を示していますも、その後はデータを使用しないでください。どんな指導も途方もなく受けました!これまでのところ、以下のコードは、たとえば8つの16進値の範囲とは対照的に、単一値の整数を編集ボックスに出力するだけです。
PS-私はプログラミングに不慣れなので、優しくしてください!複雑すぎることはありません。
procedure TForm1.ProbeFile(FileIterator: TFileIterator);
type
TMyHeader = Array[1..64] of packed record
First8Bytes,
Next16Bytes,
Next2Bytes: byte;
end;
var
FI : TFileIterator; //File Iterator class
SG : TStringGrid;
NumRead : SmallInt;
FileToProbe: TStream;
header: TMyHeader;
begin
FI := TFileIterator.Create;
SG := TStringGrid.Create(self);
// Open the file and read the header
FileToProbe := TFileStream.Create(FileIterator.FileName, fmOpenRead);
try
FileToProbe.seek(0, soFromBeginning);
FileToProbe.ReadBuffer(header, SizeOf(header));
edit1.text := IntToStr(header[0].First8Bytes); // Just outputs '0' to the field? If I try '10' it ooutputs '29' and so on
finally
FileToProbe.Free;
end;