第 3 章 ファイル名

この章では、次の事項について説明します。

3.1 ファイル命名規則

この COBOL システムと、この COBOL システムを使って作成したアプリケーションでは、標準的な UNIX のファイル命名規則を採用しています。

3.2 ファイル名の割り当て

物理的なファイル名、または、実行時に物理的な名前にマップできる論理的なファイル名を指定するには、SELECT 文の ASSIGN 句を使用します。

ファイル名の割り当てには、次のような 3 種類の方法があります。

これら 3 種類すべてのファイル名の割り当て方法でファイル名のランタイムマッピングを使用することができます。

3.2.1 ファイル名の静的割り当て

ファイル名の静的割り当てでは、ファイル名を SELECT 文でリテラルとして指定します。

select filename
   assign to literal.

次の例では、stockfile を開くと、現在のディレクトリにある warehs.buy ファイルが開きます。

select stockfile
   assign to "warehs.buy".

次の例では、input-file を開くと、現在のディレクトリに相対的な data ディレクトリの prog ファイルが開きます。

select input-file
   assign to "data/prog".

3.2.2 ファイル名の動的割り当て

ファイル名の動的割り当てでは、ファイル名を SELECT 文で COBOL データ項目として指定します。

select filename
   assign to dynamic data-item

各パラメータの内容は次のとおりです。

data-item COBOL データ項目の名前です。プログラムでデータ項目が明示的に宣言されていない場合、ピクチャ句 PIC X(255) を使用して、コンパイラがデータ項目を自動的に作成します。ファイルに対して OPEN 文を実行する前に、プログラムでデータ項目の値を指定する必要があります。

ASSIGN"DYNAMIC" コンパイラ指令を使用する場合には、ASSIGN 句から DYNAMIC という単語を省略することができます。

次の例では、input.dat というファイルが現在のディレクトリに作成されます。

...
select fd-in-name
   assign to dynamic ws-in-file.
...
working-storage section.
01 ws-in-file     pic x(30).
...
move "input.dat" to ws-in-file.
...
open output fd-in-name.

3.2.3 ファイル名の外部割り当て

ファイル名の外部割り当てでは、ファイル名を SELECT 文で次のように指定します。

select filename
   assign to external external-file-reference

各パラメータの内容は次のとおりです。

external-file-reference 外部環境に指定されたファイルでさらにマッピングが可能かどうかを識別する COBOL 語です。external-file-reference に 1 つまたは複数のハイフン (-) が含まれる場合、最後のハイフンまでのすべての文字が無視されます (最後のハイフンも無視されます)。

ランタイムファイル名マッピングの詳細については、『ファイル名マッピング』の項を参照してください。

3.3 Library Names in Paths

You can include a library name in the name of a file you want to open. The file specification is of the form:

 /library-name.lbr/filename.ext 
Example
/appdir/applib.lbr/app.dat

This type of filename is only valid when used as the name of a data file being opened in read-only mode, using either OPEN INPUT syntax or the CBL_OPEN_FILE byte stream routine. If the library is not already open, this call will open that library on the given device and leave it open after the call. If the library does not exist, or if the given filename.ext does not exist in that library, a "file not found" error is returned.

3.4 ファイル名マッピング

この COBOL システムには、プログラムで ASSIGN 句を使用して指定したファイル名を別の名前にマップする方法が複数あるため、実行時に柔軟に対応できます。

ファイルハンドラにファイル名 (リテラル、データ項目の内容、または、ASSIGN TO EXTERNAL 構文を使用した場合は外部リファレンスとしてのファイル名) が指定されている場合は、その名前の最初の要素を分離します。つまり、バックスラッシュ (\) がある場合は、最初のバックスラッシュ文字より前にあるすべてのテキストを分離します。また、ファイル名がバックスラッシュ文字で始まる場合には分離させません。これらの処理の後で、次の処理を行います。

この処理結果を物理ファイルのファイル名にします。

ASSIGN 句のファイル名 検索対象の環境変数 環境変数の内容 物理ファイルのファイル名
dir/file1 dd_dir d2 d2/file1
dir/file1 dd_dir d2/d4 d2/d4/file1
dir1/dir2/file1 dd_dir1 d4 d4/dir2/file1
dir1/dir2\file1 dd_dir1 d2/d4 d2/d4/dir2/file1
file1 dd_file1 d2 d2

環境変数の名前にピリオド ( . ) が使用できない場合でも、ファイル名にはピリオドを使用することがよくあります。このため、ピリオドを含む論理ファイル名をマップする場合があります。この場合は、"." をアンダスコア文字 ( _ ) で置き換える必要があります。例えば、次のようになります。

dd_file_PNT=/usr/qa/myfile.pnt

refers to the logical filename file.PNT.

3.4.1 複数パス

ファイル名のマッピングに使用する環境変数は、複数のパス名を指します。そのため、環境変数が指定した最初のパスに対して「ファイルが見つからない」という状態が返されると、システムは次のファイルを検索します。

次のような dd_dir という名前の環境変数があると仮定します。

dd_dir=/a/b;/c/d;

この場合、\a\b に対して「ファイルが見つからない」という状態が返されると、システムは、割り当てられたファイルを \c\d で検索します。


注:


3.4.2 Library Names

You can include library names in a multiple path environment variable. For example, if you have issued the command:

set test=/apdir;/aplbr/aplbr.lbr;/aplbr/aplbr1.lbr

the filename $test/app.dat would be resolved to /aplbr/aplbr.lbr/app.dat if /apdir/app.dat did not exist.

The libraries are searched in the order they appear in the environment variable.

You can also specify a library as part of the search path for program calls. For example, if you have issued the command

set appath=/apdir/progs1.lbr;/appdir/progs2.lbr 

you can use the format:

call "$appath/prog"

Your COBOL development system will search the libraries progs1.lbr and progs2.lbr for the program prog1. The libraries are searched in the order they appear in the environment variable. Any library searched remains open during the execution of the application, unless the application itself explicitly closes it.

3.5 オペレーティングシステムデバイス名の割り当て

プリンタに直接レポートを送信するか、通信ポートを通してデータを転送するための COBOL プログラムを作成することができます。そのためには、COBOL ファイル名にデバイス名を割り当てる必要があります。

次に示すデバイス名は、ファイル名の静的割り当て、動的割り当て、または、外部割り当てを使用して指定することができます。

CON コンソールキーボードまたは画面
PRN 最初のパラレルプリンタ
LPT1 最初のパラレルプリンタ
LPT2 2 番目のパラレルプリンタ
LPT3 3 番目のパラレルプリンタ
COM1 最初の非同期通信ポート
COM2 2 番目の非同期通信ポート

これらのデバイス名を指定するときに、末尾にコロン (:) を指定することもできます。

次の例では、fd-name へ読み書き操作を行うと、コンソール画面でデータの読み書きが行われます。

select fd-name
   assign to "con".

この例では、fd-name へ書込み操作を行うと、データが最初のパラレル プリンタである lpt1: に出力されます。

select fd-name
   assign to dynamic ws-filename.
   ...
   move "lpt1:" to ws-filename.

3.6 パイプのセットアップ

COBOL ファイル構文を使用して、別のプロセス (dir コマンドなど) を起動し、そのプロセスの標準入力にデータを書き込んだり、そのプロセスの標準出力からのデータを読み込んだりすることができます。この場合、COBOL ファイル編成は、LINE SEQUENTIAL または RECORD SEQUENTIAL のどちらかである必要があります。

3.6.1 出力パイプ

プロセスを起動し、データを標準入力に書き込むためには、ファイル名の > 記号の後にコマンド名を続ける必要があります。ファイルは、出力ファイルとして開く必要があります。

select output-file
   assign to ">lpr"
   organization is line sequential.
...
open output output-file
write output-file-record from "Hello world".

この例では、プログラムは文字列、Hello world を印刷プロセスの標準入力に渡します。

3.6.2 入力パイプ

プロセスを起動し、標準出力からデータを読み込むには、< 記号の後にコマンド名を続ける必要があります。ファイルは、入力ファイルとして開く必要があります。

select input-file
   assign to "<ls"
   organization is line sequential.
...
open input input-file
read input-file

この例では、プログラムは ls プロセスを起動し、そのプロセスが標準出力に書き込む最初の行を読み込みます。

3.6.3 双方向パイプ

双方向パイプは、入力パイプと出力パイプの機能を組み合わせたものです。双方向パイプを使用するには、ファイル名のパイプ記号 (|) の後にコマンド名を続ける必要があります。ファイルは、入出力ファイルとして開く必要があります。

select i-o-file
   assign to "| cat"
   organization is line sequential.
...
   open i-o i-o-file
   write i-o-file-record from "Hello world"
   read i-o-file

この例では、プログラムは cat プロセスを起動し、Hello world という行を標準入力に渡します。次に、cat プロセスの標準出力から 1 レコードを読み込みます。


Copyright © 2006 Micro Focus (IP) Ltd. All rights reserved.