1

標準のPascal(ISO7185Assign )には、プログラマーがファイル変数にある種のファイル名を割り当てることができる手順はありませんでした。TurboPascalおよびその他の派生物にのみ表示されました。

それで...標準に準拠している場合、特定のファイルへのハンドルを開くにはどうすればよいですか?

私が見つけた最も近いものは、このIrie Pascalの例です:

program vowels(f, output);
var
   f : file of char;
   tot, vow : integer;
   c : char;
begin
   reset(f);
   tot := 0;
   vow := 0;
   while not eof(f) do
      begin
         read(f, c);
         case c of
            'a', 'e', 'i', 'o', 'u',
            'A', 'E', 'I', 'O', 'U'
               : vow := vow + 1;
            otherwise
         end;
         tot := tot + 1;
      end;
   writeln('Total characters read = ', tot);
   writeln('Vowels read = ', vow)
end.

これは、スタートアップパラメータとしてファイル名を指定できる可能性があることを示しています。これは、IriePascalを使用して機能します。ただし、これをP5で使用しようとすると、これは、私が見つけた最新のコンピューター用の標準準拠のPascalコンパイラーに最も近いはず**** Error: external file unknown 'f 'です。それで、標準的な方法は何でしょうか?それとも、これは実際には標準的な方法であり、P5は何か間違ったことをしていますか?

編集:標準もサンプルを提供します

program copy (f, g);
  var f,g : file of real;
begin
  reset(f) ; rewrite(g);
  while not eof(f) do
    begin
      g^ := f^ ; get(f) ; put(g)
    end
end.

しかし、私はそれをどのコンパイラでも動作させることができませんでした。

Edit2:

このようにそれを行う:

program copy (f, g);
  var f,g : file of char;
begin
  reset(f) ; rewrite(g);
  while not eof(f) do
    begin
      g^ := f^ ; get(f) ; put(g)
    end
end.

入江で問題なく動作し、規格に準拠しています。これを使用して、起動パラメータとしてファイル名を指定できます。

ただし、Marco van de Voortが説明しているように、

ISO 7185には、プログラムがファイル名を指定するための標準的な方法がまったくないため、そのような方法はすでに7185を超えています(バインドはISO 10206、割り当てはUCSD / BP、リセットの2番目のパラメーターはGPCとIの拡張です)他のコンパイラを考えてみてください)。

ソース

4

2 に答える 2

2

IIRCこれは、プログラムを開始する前にOSがファイルをバインドするVMSサポート用でした。

バインドされていないファイルは自動的にtempfileiircになりました。GNU Pascalのメールリスト(古いアーカイブ、たとえば2005年程度)を検索すると、ISOファイルの実装についてかなりの議論がありました。

于 2013-02-20T10:09:02.200 に答える
1

それはCDC6000シリーズマシンのスコープでした。ただし、残りは正しいです。基本的に、スコープコマンド言語で論理ヘッダーファイル名に外部ファイルを割り当てました。

もちろん、これは今では非常に退屈に思えますが、これらはバッチモードのコンピューターの時代であり、すべてが入力として実行されるカードの「デッキ」として送信され、一連の出力「カード」として収集されました。テープリールは実際のカードを取り除きましたが、テープはテープ上のカードのコレクションとして扱われました。

通常の使用では、Wirthの元のコンパイラは、実際には入力ファイルと出力ファイルのみに制限されていました。複数の入力ファイルが必要な場合は、それらを連結します。ほとんどの入力ファイルと出力ファイルはテキストであり、すべてのファイルに個別のエンドトールケンが含まれていたため、これは思ったよりも簡単でした。

このパラダイムは、ジョブ用の入力テープと出力テープをバッチシステムにマウントするという考えによく適合します。バッチコンピュータの仕事は、入力テープを線形に処理し、出力テープを作成することでした。大きくて高速なマシンでは、複数のジョブが1つのテープに連結され、順番に実行されます。

高速プリンタのオプションは、通常、システムを完成させます。したがって、コンピュータサイエンスを学んでいる1960年代の大学生は、タイプライターのように見えるデッキをパンチし(またはキーパンチオペレーターがタイプする)、そのデッキを収集してテープデッキに転記し、実行するようにスケジュールしました。1時間以上後、プログラムからの出力を表す緑色のバーのセクションがプリンターから渡されました。

とにかく、なぜワースがその言語にその制限を課したのかについては、常に良い議論の質問です。おそらく、CDC 6000マシンが、名前でファイルをランダムに開く機能を処理できなかったのは、単純な理由によるものです。また、Pascalの前身であるAlgolには、I/Oステートメントがまったくなかったことを忘れないでください。彼らは、I/Oは本質的にマシン固有であると考えました。

スコット・ムーア

于 2013-11-09T00:08:22.640 に答える