掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
Record型のフィールド数を求めるには? (ID:42123)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
ありがとうございます。 TSさんのご指導によって、FileStreamで調べてみて、ソースを考えました。 例えば、 バージョン①では、 AData = record X:Integer; Y:Integer; Z:Integer; end; バージョン②では、 AData = record X:Integer; Y:Integer; Z:Integer; W:String; end; だとすると、 バージョン①のファイルを書き込むとき、 ファイルには、 (1)バージョン ① バージョン①は、フィールド数が[X],[Y],[Z]の3個なので、(2)(3)を3回繰り返して、 (2)データの数量 [X] はIntegerで、サイズは4バイト (3)実際のデータ 811(例) (2)データの数量 [Y] はIntegerで、サイズは4バイト (3)実際のデータ 1351(例) (2)データの数量 [Z] はIntegerで、サイズは4バイト (3)実際のデータ 092(例) という風にファイルの書き込めばいいのですね。 ファイルへの書き込みはわかったのですが、最初の質問に戻ってしまいました。 最初の質問は、「Record型のフィールド数を求めるには?」だったんですが、 結局、バージョン情報とそのデータのサイズと内容を個数分ファイルへ書き込んむとき、 バージョン①では、 AData = record X:Integer; Y:Integer; Z:Integer; end; なので、 バージョン情報①、データのサイズと内容を3個分 バージョン②では、 AData = record X:Integer; Y:Integer; Z:Integer; W:String; end; なので バージョン情報②、データのサイズと内容を4個分 をファイルに書き込む、つまり、Record型のフィールド数を求めるには、ソースコードを直接見て数えて、その数にあわせて読み書きのソースコードを書くしかない、ということですよね。 例えば、ストリングリスト型の変数の場合、 t : TStringList; ならば、 t.countでtの要素数がわかるので、 for i:=1 to t.count begin (2)t[i]のサイズを書き込み (3)t[i]の内容を書き込み end; とすれば、ソースコードを見てtの要素数を数えなくても、要素数分のデータのサイズと内容を書き込めますが、 record型の変数の場合、 AData = record X:Integer; Y:Integer; Z:Integer; end; で、AData.count みたいなことをしても、フィールド数はわかりませんよね。 前回あきらめようと思ったことは、ファイルへの読み書きではなく、このAData.countみたいに、簡単にRecord型の変数のフィールド数を求めることをあきらめようと思って書きました。 ご指導いただいた内容を参考にして、Record型のデータをファイルへ読み書きします。 ありがとうございました。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.