掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
Record型のフィールド数を求めるには? (ID:42114)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
ありがとうございます。 takeさんのソースで、"3"を取得できました。 ただ、ご察しの通り、実際のプログラムでは、Record型の要素はIntegerだけではないので、これは使えないと思います。せっかくなのに、ごめんなさい。 ところで、なぜ、このようなことがしたかったかというと、その目的は、Record型の変数をファイルに保存したり、ファイルから読み込んだ値をRecord型の変数に代入するのに必要だと考えたからです。 [現在] 保存するときは、 AssignFile( stf, FileName ); Rewrite( stf ); Writeln( stf,x ); Writeln( stf,y ); Writeln( stf,z ); CloseFile( stf ); ※実際は、数値型の場合はIntToStrで変換しています。 読み込む時は、 AssignFile( ltf, FileName ); Reset( ltf ); while Eof( ltf )=false do Begin Readln( ltf, LoadLine ); sl.add(LoadLine) End; CloseFile( ltf ); として、一旦StringList型の変数SLに代入してから、 x:=sl[0]; y:=sl[1]; z:=sl[2]; というようにしています。 今は、これで問題ないのですが、プログラムを拡張して、Record型の要素数が増えた時に、古いファイルを開くと、都合が悪いのです。 例えば、 今後、Record型の要素に"w"が増えた場合に、 AssignFile( ltf, FileName ); Reset( ltf ); while Eof( ltf )=false do Begin Readln( ltf, LoadLine ); sl.add(LoadLine) End; CloseFile( ltf ); として、一旦StringList型の変数SLに代入してから、 x:=sl[0]; y:=sl[1]; z:=sl[2]; w:=sl[3]; とすると、古いファイルには、sl[3]に対応する値は存在しないために、エラーが発生すると思います。 そこで、 x:=sl[0]; y:=sl[1]; z:=sl[2]; w:=sl[3]; を実行する直前に、Record型の要素の数を数え、sl.countよりも多い場合は、 その数の差分、 sl.add(''); を行って、sl.countをRecord型の要素の数と同じにしたいのです。 もしかしたら、 Record型の変数をファイルに保存したり、ファイルから読み込んだ値をRecord型の変数に代入するこの方法に問題があるのかもしれません。 もし、Record型の変数をファイルに入出力するよい方法があれば、教えていただければありがたいです。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.