掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
ユーザによって登録されるデータの保存について (ID:3342)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
にしのさん、どうもありがとうございます。 今回、私が考慮せねばならない点が、にしのさんのご指摘により 2 つあることが分かりました。 それで、まず、データの読み書きについて取り掛かろうと考えています。 適当なレコードを作成し、TFileStream を用いてのデータの 読み書きするコードを作成してみました。 type TMyRec = record Name: array[0..9] of Char; // string[10] との違いは? Number: array[0..9] of Char; end; const MyFileName = 'test.dat'; // データの書き込みを行う procedure TForm1.Button1Click(Sender: TObject); var fs: TFileStream; MyRecArr: array[0..3] of TMyRec; i: Integer; begin // データのセット for i := 0 to 3 do begin StrPCopy(MyRecArr[i].Name, 'Name'+IntToStr(i)); StrPCopy(MyRecArr[i].Number, 'Number'+IntToStr(i)); end; fs := TFileStream.Create(MyFileName, fmCreate); try for i := 0 to 3 do begin fs.Write(MyRecArr[i], SizeOf(TMyRec)); end; finally fs.Free; end; end; // データの読み込みを行う procedure TForm1.Button2Click(Sender: TObject); var fs: TFileStream; MyRec: TMyRec; sz: Integer; begin sz := SizeOf(TMyRec); fs := TFileStream.Create(MyFileName, fmOpenRead); try while sz = fs.Read(MyRec, sz) do begin ListBox1.Items.Add(MyRec.Name + ' : ' + MyRec.Number); end; finally fs.Free; end; end; 上記のようなレコード型である TMyRec に Name, Number を持たせています。 コードを実行すると、正常に動作するのですが、宜しければ ご意見いただけると助かります。 1. TMyRec にある Number: array[0..9] of Char; は、 Number: string[10] と等価と考えて宜しいのでしょうか? 上記の Number を string[10] と変更した場合、StrPCopy の箇所を 適切に変更すれば、正常に動作させる事が出来ました。ということは、 Char の配列(サイズ 10) と string[10] は完全な等価と 考えて宜しいのでしょうか?(何を気にしているのかといいますと、 C 言語などは、末尾がヌルで終わるようになっていると 記憶していますので、その辺の事を考慮する必要があるのかが 分からないでいます) 2. TMyRec が保持できるデータは、固定長です。もし、Number を 可変長にしたい場合には、何を考慮すればよいのでしょうか? 例えば、Number: string; とした場合、Number は AnsiString 型に なり、すなわち Number はポインタを意味しているので、 上記のサンプルコードのような手法では、データを保存することは できませんよね。私が考えているのは、恐らく、可変長データを 扱う場合には、その(可変長)データのサイズを別の値として保持しておき、 そのサイズ分のデータを書き込む(或いは読み込む)のだと思うのですが、 その場合、可変長データとして扱いたい Number は、どのような型として 宣言すればよいのでしょうか? 3. 上記のような形式のデータ書き込みは、にしのさんのおっしゃっている > 単純に、データ保存用のRecord型を用意して、あらかじめバイナリに > なるように設定しておき、そのままread/writeすればOKだと思います。 となっているのでしょうか? 「予めバイナリになるように設定」というのは、何か特別な処置を 行う必要があるのでしょうか? 長くなってしまいましたが、ご意見頂けたら幸いです。 ※ユーザーによって、ファイル変更された場合の対処の件は、 > 一番簡単なのは、CRCなりMD5なり、現在のデータの整合性を確認するためのキーを > ファイルの一部に書き込んでおき、読み込むときに整合性チェックを行うというも > のです。 という対処ができれば、私としてはとても満足です。ただ、CRC, MD5 などは、 初めて聞くものですものですので、少し自分で調べてから、報告させて下さい。 よろしくお願いいたします。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.