Delphi 標準入出力
◆Delphiの標準入出力の処理について調べていたところ、大きな勘違いをしていたことに気付いてしまった。
「Delphiでは標準入力のEofを検知できない」と、どこかのサイトの内容を鵜呑みにしてしまっていたかも...
リダイレクトを使ってファイルを標準入力から読ませたい場合、ファイルの末尾を検出する必要があるが、
下記のソースの様にパラメータ無しでEof関数を記述すると、標準入力の末尾を判定することができた。
Eof関数をパラメータ無しで記述できることを知りませんでした。
サンプルソース
program tips001; {$APPTYPE CONSOLE} uses System.SysUtils; var str: string; begin while not eof do begin ReadLn(str); WriteLn(str); end; end.
バッチファイル
dcc32 tips001.pas tips001.exe <input.txt >output.txt
◆DelphiのHELPで調べてみると、パラメータ無しの場合は標準ファイル変数 Inputが対象になることが記載されていた。トホホ…
書式
function Eof: Boolean; overload; function Eof(var F): Boolean; overload; function Eof(var F: Text): Boolean; overload;
説明
Delphi コードでは,Eof 関数は,現在のファイルポインタがファイルの終わりであるかどうかをテストします。 F は,読み出し用に開かれているファイル変数です。 指定しない場合は標準ファイル変数 Input になります。 Eof(F) は,現在のファイルポインタがファイルの最後の文字を超えている場合やファイルが空の場合は true を返し, それ以外の場合は false を返します。