9. ファイル型 (File Types)
9.1. ファイル構造
・外部ファイルとの関連付け (標準 Pascal の場合)
標準 Pascal では program ヘッダのパラメータと外部ファイルとの関連付けは処理系定義となっています。つまり、規格では定められていません。
・外部ファイルとの関連付け (Pascal-P5 の場合)
Pascal-P5 では、2 つの特殊なテキストファイルが扱えます。
外部ファイル | 説明 |
---|---|
prd | 読み込み専用の外部ファイル |
prr | 書き込み専用の外部ファイル |
詳しくは次の記事を参考にしてください。
・外部ファイルとの関連付け (UCSD Pascal の場合)
UCSD Pascal などでは Reset() や Rewrite() の第 2 引数にファイル名を渡せるようにして問題を解決しています。
PROGRAM RANDOMACCESS;
VAR
DISK: FILE OF
RECORD
NAME: STRING[20];
DAY, MONTH, YEAR: INTEGER
END;
BEGIN
RESET(DISK, 'RECORDS.DATA');
WHILE NOT EOF(INPUT) DO
BEGIN
...
・外部ファイルとの関連付け (拡張 Pascal の場合)
拡張 Pascal では Bind() / Binding() / Unbind() とレコード型 BindingType を使って問題を解決しています。
procedure bindfile(var f : text);
var
b : BindingType;
begin
unbind(f);
b := binding(f);
repeat
writeln('Enter file name:');
readln(b.name);
bind(f, b);
b := binding(f);
if not b.bound then
writeln('File not bound--try again.');
until b.bound;
end;
See also:
9.2. テキストファイル
・Eoln 状態の文字は?
Eoln()
が True の状態で Read()
によって 1 文字読み込んだ時、標準 Pascal は空白を返します。Delphi は改行コードを返します。
See also:
・Write と Writeln
標準 Pascal でテキストファイルに出力する際、Writeln()
ではなく Write()
で終わった場合、不完全な行とみなされ、行末が自動で追加されます。
(13.) テキストファイルでの Write と Writeln - Delphi と標準 Pascal の比較 (標準 Pascal コードを Delphi に移植する際の注意点) (Qiita)
(9.2.1.) バッファ変数の代替
テキストファイルの操作に限定されますが、次の関数でバッファ変数の代替が可能です。
function CurrentChar(var F: Text): AnsiChar;
begin
Eoln(F);
Result := (TTextRec(F).BufPtr + TTextRec(F).BufPos)^;
end;
関数 CurrentChar()
を使って F^
を置き換えられます。
var
F: Text;
ch: Char;
begin
...
ch := F^;
ch := CurrentChar(F);
...
end.
CurrentChar()
関数内の一見無意味に思える Eoln()
は、ファイルバッファを更新する役割があります。タイミングによっては BufPos
が BufSize
と同じになってしまう (ポインタがファイルバッファの終端を超える) 事があるからです。
(9.2.2.) ファイルの追記
(9.3.) バイナリファイル
(9.3.) 型なしファイル
・型なしファイルの由来
Delphi には型なしファイル型というものがあります。いわゆるバイナリファイルを扱うファイル型です。
この拡張は UCSD Pascal 由来のようです。BlockRead()
や BlockWrite()
も用意されていました。Turbo Pascal にも ver1.0 から BlockRead()
や BlockWrite()
があります。
テキストバッファや型なしファイルのレコードサイズのデフォルトが 128 バイトなのは、元を辿れば CP/M のセクタサイズが 128 バイトなところから来ているのだろうと思われます。
See also:
(9.5.) 標準入出力ルーチン
索引
[ ← 8. 集合型〔裏〕 ] [ ↑ 目次へ ] [ → 10. ポインタ型〔裏〕 ]