ファイルタイプを関数に渡すには?


inoue  2006-03-29 01:58:55  No: 20729

ファイルタイプを関数に渡す方法を教えてください。
下記のように書いたらエラーがおきます。よろしくお願いします。
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;


6里  2006-03-29 20:15:35  No: 20730

ファイル型を引数にするのはやめたら?


  URL  2006-03-29 20:49:59  No: 20731

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 は無いので問題ないとは思いますが。


Basser  2006-03-29 20:51:16  No: 20732

コンパイル迄しか試していませんが下記のように記述したらどうですか?

  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;


  URL  2006-03-29 20:56:10  No: 20733

追伸

  このことと関連して、ファイル型変数は、
  配列の要素、レコード型のフィールドにも使えません。


さどやま  URL  2006-03-29 21:02:21  No: 20734

失礼しました。
  var を試さずに投稿してしまいました。
  Basserさんが書かれたとおりですね。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加