PL/I の入出力ステートメント (READ、WRITE、GET、 PUT など) を使用すれば、 計算機の主記憶装置と補助記憶装置との間でデータを伝送することができます。 プログラムの外部にあるデータの集まりをデータ・セット といいます。 データ・セットからプログラムへデータを伝送することを入力 といい、 プログラムからデータ・セットへデータを伝送することを出力 といいます。 (端末を使用している場合には、「データ・セット」は端末も意味することがあります。)
PL/I の入出力ステートメントは、 データ・セットの論理的な編成に関係するものであり、 データ・セットの物理特性とは関係がありません。 したがって、プログラムの実行時に使用される入出力装置についての特別な知 識がなくても、プログラムを設計することができます。 データ・セット内の物理編成ではなく、 データの論理的な側面を主眼にソース・プログラムを処理することができるように、 PL/I ではファイル と呼ばれるデータ・セットのモデルを採用しています。 同じファイルを、プログラムの実行中の別々の時点で、別々のデータ・セットに関連づけることができます。
PL/I には、ストリームとレコードの 2 通りのデータ伝送方法があります。
ストリーム指向データ伝送では、データ・セット内のデータの編成はプログ ラムでは無視され、データは、文字フォーマットの個々のデータ値が連続するストリー ムと見なされます。 入力の場合は、データは文字フォーマットから内部フォーマットに変換され、出力の場合は、 内部フォーマットから文字フォーマットに変換されます。
ストリーム指向データ伝送の詳細については、ストリーム指向データ伝送を参照してください。
ストリーム指向データ伝送は、文字フォーマットで用意された入力データを処理したり、可読フォーマットの出力を作成したりする (編集する必要がある) 場合に使用することができます。 プログラムが対話式システムのもとで実行されているときは、ストリーム指向データ伝送を使用すれば、実行時に端末からプログラムと同期通信すること ができます。
データの書式作成が可能という点で、ストリーム指向データ伝送はレコード単位データ伝送よりも多様性があります。しかし、その結果、実行時間は増加します。
レコード単位データ伝送では、データ・セットは個別レコードの集まりと見なされます。 外部メディア上のレコードは、普通は内部ストレージに入っているレコードをそのままコピーしたものです。 レコード単位データ伝送時にはデータ変換は行われません。 すなわち、入力の場合は、データはデータ・セットに記録されている とおりの形で伝送され、出力の場合は、データは内部で記録されている とおりの形で伝送されます。
レコード単位データ伝送の詳細については、レコード単位データ伝送を参照してください。
レコード単位データ伝送は、2 進数、10 進数、または文字などのフォーマットで表記されているデータが入っているファイルを処理する場合に使用することができます。
レコード単位データ伝送は、ストリーム指向データ伝送に比べて、データの処理方法の点と、処理できるデータ・セットのタイプの点で多様性があります。 データは、それが主記憶域にあるとおりの形でデータ・セットに記録されるため、どのようなデータ・タイプでも可能です。 なにも変換は行われませんが、ユーザーはデータ構造について確実に把握している必要があります。
同じデータ・セットを、ある時点ではストリーム指向データ伝送で処理し、 別の時点ではレコード単位データ伝送で処理することもできます。 ただし、その場合は、データ・セット内の項目はすべて文字フォーマットでなければ なりません。
この章の以降の節では、データ・セットの種類、ファイルを記述するための属性 、およびデータを伝送するためのファイルのオープンとクローズの方法につい て説明します。 PL/I で認識されるデータ・セット編成のタイプの詳細については、 「プログラミング・ガイド」を参照してください。