計算機実験 II(塩田・森教官) No.6

  1995年11月24日の課題 : ファイル入出力

[1] ファイル入出力を覚える。

  1. ファイル変数の宣言は  var ファイル変数名 : file of 型名 ;

  2. 新規ファイルへの書き込み用オープン命令は  rewrite(ファイル変数名,ファイル名);

  3. 既存ファイルの読み出し用オープン命令は  reset(ファイル変数名,ファイル名);

  4. ファイルのクローズ命令は  close(ファイル変数名);

  5. ファイルからのデータ読み出し命令は  read(ファイル変数名,変数名);

  6. ファイルへのデータ書き込み命令は  write(ファイル変数名,変数名);

  7. 読み出し用ファイルが終わりに達したかどうかは関数  eof(ファイル変数名) ( 値は論理値 )で調べる。

  8. 入出力には get, put という命令もある。( テキスト pp.102-104 )

[2] テキストファイルへの入出力を覚える。

[1]のファイルは一般にバイナリファイルであるが、 テキストファイルを入出力に使うこともできる。

  1. ファイルの宣言は  var ファイル変数名 : text;

  2. ファイルのオープン・クローズ命令、eof は[1]に同じ。

  3. ファイルへのデータ書き込み命令は

      write(ファイル変数名,変数名:書式, … );

    または

      writeln(上と同様); 

    で、画面出力と同じ要領でファイルに書き込まれる。

  4. ファイルからのデータ読み出し命令は

      read(ファイル変数名,変数名);

    または

      readln(上と同様);

    で、readln の場合はその行に残ったデータは読み飛ばされる。

  5. 行末に達したかどうか調べる関数 eoln や 改ページ命令 page もある。

[3] サンプル
program sample6a;  { 素数表 }

const max=10000;

var
  f:file of integer;
  name:varying[100] of char;
  a:array[1..max] of boolean;
  i,j,m,p:integer;

begin
  m:=trunc(sqrt(max));
  for i:=1 to max do a[i]:=true;
  a[1]:=false;
  p:=2;
  while p<=m do
    begin
      if a[p]=true
        then begin
          j:=2*p;
          while j<=max do begin a[j]:=false; j:=j+p end
        end;
      p:=p+1
    end;
  name:='prime';
  rewrite(f,name);
  for i:=1 to max do
    if a[i]=true then begin write(f,i); write(i) end;
  writeln;
  close(f)
end.