ファイルタイプを関数に渡す方法を教えてください。
下記のように書いたらエラーがおきます。よろしくお願いします。
procedure TForm1.Button6Click(Sender: TObject);
Var
FileP: File of Adm;
begin
AssignFile(FileP, 'C:\FName.dat');
Reset(FileP);
//ここで関数にFilePを渡したいのですが、 read(FileP); でよいのでしょうか?
end;
Function read(F: ???); //???のところにFile of Admと書いたらエラーとなります。
begin
end;
ファイル型を引数にするのはやめたら?
1.ファイル型変数はデバイスドライバ専用
推測ですが、
ファイル型変数は、入出力ルーチン専用の変数で、入出力ルーチンの中でのみ使用できると思われます。
入出力ルーチンとは、デバイス(装置)とのアクセスを直接行うもので、一種のデバイスドライバと言ってよいでしょう。
ファイル型の場合、Delphiに用意されているルーチンを使えば、ディスクとの間だけではなく、キーボード・ディスプレイともアクセスが可能です。
(単純なやりとりならおそらくプリンタともできる)
テキストファイルに限っては、独自のデバイスドライバを作ることができ、その関数の引数ではファイル型変数が当然使われます。
2.Function read(F: ???); の目的は
当然、この関数の中で入出力ルーチンを使いたいから、ファイル型変数を渡したいのでしょうが、
それはできないと思います。
ファイル型変数を使うのであれば、Button6Clickハンドラの中にすべて記述するしかないでしょう。
関数・手続きを別に作ってコードを整理したいのなら、TFileStraem を使う方法もあります。
3.ついでに
1)FileP: File of Adm; はButton6Clickハンドラの中で定義されていますので、
仮にFunction read(FileP: File of Adm); という記述が可能としても「未定義の識別子」になります。
2) 汎用関数名としての read はできるだけ避けたほうがよいと思います。
ヘルプで見る限り、procedure read はあっても function read は無いので問題ないとは思いますが。
コンパイル迄しか試していませんが下記のように記述したらどうですか?
type
PhoneEntry = record
FirstName, LastName: string[20];
PhoneNumber: string[15];
Listed: Boolean;
end;
PhoneList = file of PhoneEntry;
function Read(var F: PhoneList): Integer; //変数パラメータにしないとコンパイルエラーになります
begin
end;
追伸
このことと関連して、ファイル型変数は、
配列の要素、レコード型のフィールドにも使えません。
失礼しました。
var を試さずに投稿してしまいました。
Basserさんが書かれたとおりですね。
ツイート | ![]() |