前ページへREBUILD その他のトピック 次ページへ

第 10 章 ファイル処理ライブラリルーチン

この章では、ファイルの処理に使用できる COBOL システムライブラリルーチンについて説明します。

10.1 概要

次の COBOL システムライブラリルーチンを使用すると、COBOL アプリケーションからファイルを処理することができます。

CBL_CHANGE_DIR カレントディレクトリを変更します
CBL_CHECK_FILE_EXIST ファイルが存在するかどうか確認します
CBL_COPY_FILE ファイルをコピーします
CBL_CREATE_DIR ディレクトリを作成します
CBL_DELETE_DIR ディレクトリを削除します
CBL_DELETE_FILE ファイルを削除します
CBL_GET_CURRENT_DIR カレントディレクトリを返します。
CBL_JOIN_FILENAME ファイル名の構成要素部分を結合してファイル名を作成します
CBL_LOCATE_FILE ファイルを検索し、パスを拡張します
CBL_READ_DIR カレントディレクトリを読み取ります
CBL_RENAME_FILE ファイルのの名前を変更します
CBL_SPLIT_FILENAME ファイル名をその構成要素部分に分割します
x"91" function 46 ヌル挿入を有効化します
x"91" function 47 ヌル挿入を無効化します
x"91" function 48 タブ挿入を有効化します
x"91" function 49 タブ挿入を無効化します
x"91" function 52 2 バイトのレコード終了記号の使用を指定します
x"91" function 53 1 バイトのレコード終了記号の使用を指定します

10.2 ファイル処理ライブラリルーチンの解説

すべての名前別呼び出しルーチンの説明を、アルファベット順に示します。その後に、番号別呼び出しルーチンを示します。 それぞれの説明には、ルーチン名とファンクションおよび、必要に応じて、次のエントリが示されます。

構文 ルーチンを呼び出す際に使用できる CALL 文を示します。

オプションの RETURNING 句も示されます。全てのルーチンは、操作の結果を示す値を返します。特に指定がない限り、ゼロの値は成功を示し、ゼロ以外の値は失敗を示します。この値は、RETURNING 句で指定したデータ項目 (このリファレンスでは、状態コード) に残ります。この句を省略すると、値は特殊なレジスタ RETURN-CODE に残ります(呼び出し規則ビット 2 を設定すると、RETURN-CODE は変更されません。)

状態コードは、0〜65535 までの正の値を格納できる数値データ項目です (PIC X(2) COMP-5 など)。

ルーチンの名前は大文字でコード化する必要があります。

パラメータ RETURNING および USING 句に示されるパラメータを説明します。角かっこで囲まれたパラメータ ( [parameter1] など) はオプションで、ルーチンのすべてのフォームには必要ありません。
入力時 表示されるパラメータの中で、入力時に渡されるパラメータを示します。
終了時 表示されるパラメータの中で、終了時に返されるパラメータを示します。

1 以上のバイトのビットが参照される場合、ビット 0 はLSB (右端) になります。

コメント ルーチンを正常に使用するための追加情報を示します。
関連トピック 他の関連トピックを列挙します。

10.3 ルーチンの説明


CBL_CHANGE_DIR

カレントディレクトリを変更します。

構文
call "CBL_CHANGE_DIR"  using     path-name 
                       returning status-code
パラメータ:

path-name           pic x(n).
status-code         キー』を参照してください。

入力時
path-name 空白文字またはヌル (x"00") で終了する相対または絶対パス名。この値は、オペレーティングシステムで許可される最大文字数を超えないようにし、ルーチンを呼び出すときはカレントのディレクトリで有効である必要があります。
終了時

なし


CBL_CHECK_FILE_EXIST

ファイルが存在するかどうか確認して、ファイルが存在する場合はその詳細を返します。

構文
call "CBL_CHECK_FILE_EXIST" using     filename 
                                      file-details 
                            returning status-code
パラメータ

filename                       pic x(n).
file-details                   cblt-exit-paramsとしてあらかじめ定義されているグループ項目。
                               次の従属項目を含みます。
    cblte-fe-filesize          cblt-x8-compx
    cblte-fe-date            次のように定義されるグループ項目
        cblte-fe-day           cblt-x1-compx
        cblte-fe-month         cblt-x1-compx
        cblte-fe-year          cblt-x2-compx
    cblte-fe-time            次のように定義されるグループ項目
        cblte-fe-hours         cblt-x1-compx
        cblte-fe-minutes       cblt-x1-compx
        cblte-fe-seconds       cblt-x1-compx
        cblte-fe-hundredths    cblt-x1-compx
status-code                    キー』を参照してください。

入力時
filename 検索対象のファイル。名前はパスを含むことができ、空白文字で終了します。パスを指定しない場合は、カレントディレクトリとみなされます。
終了時
cblte-fe-filesize ファイルのサイズ (バイト数)
cblte-fe-date ファイルが作成された日付
cblte-fe-time ファイルが作成された時刻
コメント

ファイル名にはワイルドカード文字を使用できません。

CBL_CHECK_FILE_EXIST はストライプを認識しません。このルーチンを、ストライピングされたファイルで使用すると、最初のストライプのみに関する詳細が返されます。そのため、このルーチンは個々のストライプでのみ使用し、ストライプ名別にストライプを参照します。ストライピングされたファイルの使用方法については、『ファイルハンドラの構成』の章の『ファイルのストライピング』の項を参照してください。


CBL_COPY_FILE

ファイルをコピーします。

構文
call "CBL_COPY_FILE" using     filename1 
                               filename2 
                     returning status-code
パラメータ

filename1           pic x(n)
filename2           pic x(n)
status-code         キー』を参照してください。

入力時
filename1 コピーするファイル。名前にはパスを含めることができ、空白文字で終了します。パスを指定しない場合は、カレントディレクトリとみなされます。
filename2 新しいファイルの名前。名前はパスを含めることができ、空白文字で終了します。パスを指定しない場合は、カレントディレクトリとみなされます。
終了時

None.

コメント

ファイル名にはワイルドカード文字を使用できません。

CBL_COPY_FILE は、等価のオペレーティングシステムの呼び出しをエミュレートします。そのため、新しいファイルは現在の日時のスタンプが押されます。

CBL_COPY_FILE はストライプを認識しません。このルーチンをストライピングされたファイルで使用すると、最初のストライプのみがコピーされます。そのため、このルーチンは個々のストライプでのみ使用し、ストライプ名でストライプを参照します。ストライピングされたファイルの使用方法については、『ファイルハンドラの構成』の章の『ファイルのストライピング』の項を参照してください。


CBL_CREATE_DIR

サブディレクトリを作成します。指定したパスのすべてのディレクトリ (最後のディレクトリ以外) が存在している必要があります。

構文
call "CBL_CREATE_DIR" using     path-name 
                      returning status-code
パラメータ

path-name           pic x(n)
status-code         キー』を参照してください。

入力時
path-name 空白文字またはヌル (x"00") で終了する相対または絶対パス名
終了時

なし


CBL_DELETE_DIR

ディレクトリを削除します。ディレクトリは、空の場合にのみ削除されます

構文
call "CBL_DELETE_DIR"  using     path-name 
                       returning status-code
パラメータ

path-name           pic x(n)
status-code         キー』を参照してください。

入力時
path-name 空白文字またはヌル (x"00") で終了する相対または絶対パス名
終了時

なし


CBL_DELETE_FILE

ファイルを削除します。

構文
call "CBL_DELETE_FILE" using     filename 
                       returning status-code
パラメータ

filename            pic x(n)
status-code         キー』を参照してください。

入力時
filename 削除するファイル。名前にはパス名を含めることができ、空白文字で終了します。 パスを指定しない場合は、カレントディレクトリとみなされます。
終了時

None

コメント

ファイル名にはワイルドカード文字を使用できません。

CBL_DELETE_FILE はストライプを認識しません。このルーチンをストライピングされたファイルで使用すると、最初のストライプのみが削除されます。そのため、このルーチンは個々のストライプでのみ使用し、ストライプ名でストライプを参照します。ストライピングされたファイルの使用方法については、『ファイルハンドラの構成』の章の『ファイルのストライピング』の項を参照してください。


CBL_GET_CURRENT_DIR

カレントディレクトリを返します。

構文
call "CBL_GET_CURRENT_DIR" using 
                                by value     flags 
                                by value     name-length 
                                by reference directory-name 
                                returning    status-code
パラメータ
flags cblt-os-flags
name-length cblt-os-size
directory-name pic x(n)
status-code キー』を参照してください。
入力時
flags 予約済み。ゼロに設定する必要があります。
name-length directory-name パラメータのサイズ (バイト数)。このパラメータは、返すことができる最長のディレクトリ名より長くする必要があります。
終了時
directory-name 空白文字で終了する形式のカレント作業ディレクトリを含みます。directory-name に埋め込みの空白文字が含まれている場合は、この空白文字が二重引用符で囲まれて返されます。このパラメータは、この二重引用符も格納できる大きさにする必要があります。
status-code 戻りコード
0 成功を示します。directory-name には、カレント作業ディレクトリが含まれます。
128 name-length で指定したdirectory-name のサイズは、カレント作業ディレクトリの名前を格納できる大きさではありません。

CBL_JOIN_FILENAME

ファイル名の構成要素部分 (パス名、基本名および拡張子) を結合してファイル名を作成します。

構文
call "CBL_JOIN_FILENAME" using     sj-param
                                   join-buffer
                                   path-buffer
                                   basename-buffer
                                   extension-buffer
                         returning status-code
パラメータ
sj-param cblt-splitjoin-buf としてあらかじめ定義されたグループ項目で、次の従属項目を含みます。
cblte-sj-param-length cblt-x2-compx
cblte-sj-split-join-flag1 cblt-x1-compx
cblte-sj-split-join-flag2 cblt-x1-compx
cblte-sj-device-offset cblt-x2-compx
cblte-sj-device-length cblt-x2-compx
cblte-sj-basename-offset cblt-x2-compx
cblte-sj-basename-length cblt-x2-compx
cblte-sj-extension-offset cblt-x2-compx
cblte-sj-extension-length cblt-x2-compx
cblte-sj-total-length cblt-x2-compx
cblte-sj-split-buf-len cblt-x2-compx
cblte-sj-join-buf-len cblt-x2-compx
cblte-sj-first-component-length cblt-x2-compx
join-buffer pic x(n)
path-buffer pic x(n)
basename-buffer pic x(n)
extension-buffer pic x(n)
status-code キー』を参照してください。
入力時
cblte-sj-param-length 2 バイトの cblte-sj-param-length を含む sj-param の長さ (バイト数)。cblte-sj-param-length の標準値は 24 です。
cblte-sj-split-join-flag1 次のように設定できます。
ビット 説明
1 1
0
文字列はヌルで終了します。
文字列は空白文字で終了します。
0 1
0
新しいファイル名は大文字に変換されます。
元の大文字と小文字が保持されます。
cblte-sj-split-join-flag2 次のように設定できます。
ビット 説明
2 1 cblte-sj-split-join-flag1 のビット 1 を 0 に設定すると、各ファイル名構成要素の長さは cblte-sj-path-lengthcblte-sj-basename-length および cblte-sj-extension-length で正確に指定されます。このフラグは、ファイル名構成要素の 1 つに有効な空白文字がある場合に使用できます。cblte-sj-split-join-flag1 のビット 1 が 1 の場合、このフラグは無視されます。
0 ファイル名構成要素の長さは、cblte-sj-split-join-flag1 のビット 1 で決まります。
1 予約済み。
0 予約済み。
cblte-sj-device-offset 1 から索引化される path-buffer のパスの開始のオフセット
cblte-sj-device-length 空白文字またはヌルで終了しない場合のパスの長さ
cblte-sj-basename-offset 1 から索引化されるbasename-buffer の基本名の開始のオフセット
cblte-sj-basename-len 空白文字またはヌルで終了しない場合の基本名の長さ
cblte-sj-extension-offset 1 から索引化される extension-buffer の拡張子の開始のオフセット
cblte-sj-extension-length 空白文字またはヌルで終了しない場合の拡張子の長さ
path-buffer パス名
basename-buffer 基本名
extension-buffer 拡張子
cblte-sj-join-buf-len join-buffer の長さ
終了時
cblte-sj-total-length ファイル名の文字の合計数
join-buffer 結合されたファイル名
status-code 戻り状態
0 成功
1 join-buffer には大きすぎるファイル名
4 無効なファイル名
コメント

新しいファイル名は、次を結合して作成します。

このファイル名は、長さ、 cblte-sj-total-lengthjoin-buffer 内に配置されます。

cblte-sj-split-join-flag1 の LSB (ビット 0) を設定すると、このルーチンを使用してファイル名のアルファベットを大文字に変換できます。このビットを設定しない場合は、大文字と小文字の別が保持されます。

このルーチンは、ヌルで終了する文字列または空白文字で終了する文字列のどちらも受け入れることができます。cblte-sj-split-join-flag1 の 2 番目の LSB (ビット 1) を設定すると、ルーチンはヌルで終了する文字列とみなします。このビットを設定しない場合は、空白文字で終了する文字列とみなされます。

空白文字またはヌルで終了している場合は、パス、基本名および拡張子のフィールドを、cblte-sj-split-join-flag1ビット 1 の設定に応じて、それぞれcblte-sj-device-lengthcblte-sj-basename-length、および cblte-sj-extension-lengthで指定した長さよりも短くすることができます。

path-bufferbasename-bufferextension-buffer、および join-buffer は、それぞれ異なる 4 つのバッファにする必要があります。つまり、このルーチンは、CBL_SPLIT_FILENAME とともに使用して、ファイル名の 1 つの構成要素に置き換えることができます。

path-buffer が空ではなく後続のバックスラッシュ(\)、スラッシュ(/)またはコロン(:)のいずれもついていない場合、また basename-buffer も空でない場合は、このルーチンにより、join-buffer のパスと基本名の間にバックスラッシュ(\)が挿入されます。

拡張子が . の場合は、join-buffer で返された文字列に空白文字の拡張子が付きます。つまり、ファイル名の後ろにピリオド(.)がつきます。

cblt-sj-total-lengthcblte-sj-join-buf-len よりも短い場合は、ファイル名の終わりの後の文字は、cblte-sj-split-join-flag1 のビット 1 の値に基づきヌルまたは空白文字になります。

パスフィールドが有効なドライブ文字で構成されていても、コロン(:)がない場合は、このルーチンがコロンを追加します。ただし、コロンが必要でないデバイス (LPT1 など) には追加されません。空ではない基本名にデバイスを結合することはできません (ドライブ文字には結合できます)。

関連項目:

CBL_SPLIT_FILENAME

************************************************************
*                                                          *
*               (C) Micro Focus  2000                           *
*                                                          *
*                     SPLTJOIN.CBL                         *
*                                                          *
*  このプログラムはファイル名を構成要素の文字列            *
*  (CBL_SPLIT_FILENAME) に分けたり、結合して ファイル名    *
*  (CBL_JOIN_FILENAME) にすることができるルーチンの        *
*  例です。                                                *
*                                                          *
************************************************************

 working-storage section.

 78 environ          value "dos".

 01 split-buffer                     pic x(65).
 01 split-params                          cblt-splitjoin-buf.
     03  cblte-sj-param-length            cblt-x2-compx value 24.
     03  cblte-sj-split-join-flag1        cblt-x1-compx value 0.
     03  cblte-sj-split-join-flag2        cblt-x1-compx.
     03  cblte-sj-device-offset           cblt-x2-compx.
     03  cblte-sj-device-length           cblt-x2-compx.
     03  cblte-sj-basename-offset         cblt-x2-compx.
     03  cblte-sj-basename-length         cblt-x2-compx.
     03  cblte-sj-extension-offset        cblt-x2-compx.
     03  cblte-sj-extension-length        cblt-x2-compx.
     03  cblte-sj-total-length            cblt-x2-compx.
     03  cblte-sj-split-buf-len           cblt-x2-compx value 65.
     03  cblte-sj-join-buf-len            cblt-x2-compx value 65.
     03  cblte-sj-first-component-length  cblt-x1-compx.

 01 join-buffer              pic x(65).
 01 path-buffer              pic x(65).
 01 basename-buffer          pic x(65).
 01 extension-buffer         pic x(3) value "cbl".

 procedure division.

* 長さを設定
     move 65 to cblte-sj-split-buf-len
                cblte-sj-join-buf-len

* 空白文字で終了し、大文字に変換するフラグを設定
     move 1 to cblte-sj-split-join-flag1

$if environ = "unix"
     move "/dir/file.ext" to split-buffer
$else
     move "a:\dir\file.ext" to split-buffer

$end
     move 1 to cblte-sj-split-join-flag1
     call "CBL_SPLIT_FILENAME" using split-params
                                     split-buffer

* ここで結合に必要なパラメータの大半を設定。

* 結合ではsplit-bufferの元の拡張子を
* extension-bufferの拡張子に置き換え、
* 結果をjoin-bufferに入れます。
     move 1 to cblte-sj-extension-offset
     move 3 to cblte-sj-extension-length
     call "CBL_JOIN_FILENAME" using split-params
                                    join-buffer
                                    split-buffer
                                    split-buffer
                                    extension-buffer

$if environ = "unix"
     if join-buffer = "/DIR/FILE.CBL" then
$else
     if join-buffer = "A:\DIR\FILE.CBL" then
$end
         display "first test passed"
     else
         display "first test failed"
     end-if

* 最初に分けないで結合を設定するのは難しいが、
* 必要なことです。

     move 1 to cblte-sj-device-offset
               cblte-sj-basename-offset
               cblte-sj-extension-offset

     move length of path-buffer to cblte-sj-device-length
     move length of basename-buffer 
                                to cblte-sj-basename-length
     move length of extension-buffer 
                                to cblte-sj-extension-length
     move length of join-buffer to cblte-sj-join-buf-len

     move 0 to cblte-sj-split-join-flag1
     move 24 to cblte-sj-param-length

$if environ = "unix"
     move "/path" to path-buffer
$else
     move "c:\path" to path-buffer
$end
     move "basename" to basename-buffer

     move "ext" to extension-buffer

     call "CBL_JOIN_FILENAME" using split-params
                                    join-buffer
                                    path-buffer
                                    basename-buffer
                                    extension-buffer

$if environ = "unix"
     if join-buffer = "/path/basename.ext" then
$else
     if join-buffer = "c:\path\basename.ext" then
$end
         display "second test passed"
     else

         display "second test failed"
     end-if
  stop run.

CBL_LOCATE_FILE

このルーチンには、2 種類の使用法があります。このルーチンは、ファイル指定で環境変数を拡張する場合に使用できます。この場合、環境変数には、いくつかのパスのリストが含まれます。また、特定のファイル指定を使用する OPEN INPUT 文で、ライブラリファイル内のファイルまたは個別のディスクファイルのどちらを検索するかを指定できます。

構文
call "CBL_LOCATE_FILE" using     user-file-spec 
                                 user-mode 
                                 actual-file-spec 
                                 exist-flag 
                                 path-flag 
                      returning  status-code
パラメータ

user-file-spec      pic x(n).
user-mode           cblt-x1-compx
actual-file-spec    次のように定義されるグループ項目
    buffer-len          pic x(2) comp-x
    buffer              pic x(n)
exist-flag          pic x comp-x
path-flag           pic x comp-x
status-code         キー』を参照してください。

開始時
user-file-spec ファイル名指定を含みます。ファイル名指定には、埋め込みの環境変数またはライブラリ名を含むことができます。
user-mode user-file-spec の処理内容を指定します。
0 ファイルがライブラリ内にあるか、または個別のディスクファイルとして存在するかを確認します。

If user-file-spec に埋め込みのライブラリが含まれる場合は、そのライブラリ(存在する場合)が開かれて ファイルが検索されます。ライブラリはその後も開かれたままです。

user-file-spec に埋込みの環境変数が含まれている場合は、ファイルが環境変数で指定した各パスに従って検索されます。

ファイルが見つかると、終了時の actual-file-spec には、成功したパスに、拡張された環境変数をもつ実際のファイル指定が含まれます。ファイルが見つからない場合は、終了時の actual-file-spec に、最初のパスに拡張された環境変数をもつファイル指定が含まれます。

上記以外の場合は、終了時の actual-file-spec に、最初のパスに拡張された環境変数をもつファイル指定が含まれます。

1 user-file-spec に環境変数が含まれる場合は、終了時の actual-file-spec に、最初のパスに拡張された環境変数をもつファイル指定が含まれます。このファイルは検索されません。
2 user-file-spec に環境変数が含まれる場合は、終了時の actual-file-spec に、次のパスに拡張された環境変数をもつファイル指定が含まれます。このファイルは検索されません。このオプションは、user-mode = 1 または 2 で呼び出しが成功した後にのみ使用します。後述の『path-flag』を参照してください。
path-flag user-mode = 2 の場合は、このデータ項目に、前の user-mode = 1 または 2 の呼び出しからこの項目に返された値が含まれます。
buffer-len バッファのサイズ
終了時
buffer user-mode』で説明した解決済みのファイル指定を格納するバッファ。解決済みのファイル指定が buffer-len で指定したサイズより大きい場合は、バッファの内容は変更されず、status-code はその内容に従って設定されます。
exist-flag user-mode = 0 の場合は、このデータ項目が、終了時に、user-file-spec で指定したファイルが存在するかどうかを示します。
0 ファイルは見つからないか検索されません。
1 ファイルは開いているライブラリ内にありませんでした。
2 ファイルは user-file-spec で指定したライブラリ内にありませんでした。
3 ファイルは個別のディスクファイルとして見つかりました。

user-mode が 0 以外の場合は、このデータ項目が終了時に常に 0 になります。

path-flag user-file-spec に、actual-file-spec で拡張された埋め込みの環境変数が含まれていたかどうかを示します。
0 actual-file-spec には、埋込みの環境変数が含まれません。
>0 actual-file-spec には、拡張された環境変数が含まれます。
status-code 戻り状態
0 成功を示します。
1 環境変数は存在しません。
2 次のパスはありません。
3 解決済みのファイル名は大きすぎてバッファに格納できません。
4 結果のファイル名は無効です。
255 その他のエラーです。

user-file-spec は次のフォームを取ります。

path/filename.ext
$envname/filename.ext
path/lbr-name.lbr/filename.ext 
コメント

CBL_LOCATE_FILE はストライプを認識しません。このルーチンをストライピングしたファイルで使用すると、ルーチンは、最初のストライプのみを検索します。そのため、このルーチンは個々のストライプでのみ使用し、ストライプ名別にストライプを参照します。ストライピングされたファイルの使用方法については、『ファイルハンドラの構成』の章の『ファイルのストライピング』の項を参照してください。


CBL_READ_DIR

カレントディレクトリまたはパスを返します。

構文
call "CBL_READ_DIR" using     path-name 
                              path-name-length 
                    returning status-code
パラメータ

path-name           pic x(n)
path-name-length    cblt-x1-compx
status-code         キー』を参照してください。

入力時
path-name-length 使用する path-name の長さ。この長さが短すぎてパス名を含めることができない場合は、ルーチンが失敗します。
終了時
path-name 空白文字またはヌル (x"00") で終了する相対または絶対パス名

CBL_RENAME_FILE

ファイルの名前を変更します。

構文
call "CBL_RENAME_FILE" using     old-filename 
                                 new-filename 
                       returning status-code
パラメータ

old-filename        pic x(n)
new-filename        pic x(n)
status-code         キー』を参照してください。

入力時
old-filename 名前を変更するファイル。名前はパス名を含めることができ、空白文字で終了します。パス名を指定しない場合は、カレントディレクトリとみなされます。

このルーチンは、ワイルドカード文字を含むファイル名に対しては機能しません。

new-filename 空白文字で終了する新しい名前。old-filename にパス名が含まれる場合は、この新しい名前に同じパス名が含まれる必要があります。一部のオペレーティングシステムでは、new-filename の名前のファイルがすでに存在する場合に、ファイル名を変更できないことがあります。
終了時

なし

コメント

CBL_RENAME_FILE はストライプを認識しません。このルーチンをストライピングしたファイルで使用すると、ルーチンは、最初のストライプのみの名前を変更します。そのため、このルーチンは個々のストライプでのみ使用し、ストライプ名でストライプを参照します。ストライピングされたファイルの使用方法については、『ファイルハンドラの構成』の章の『ファイルのストライピング』の項を参照してください。


CBL_SPLIT_FILENAME

ファイル名をその構成要素部分 (パス名、基本名および拡張子) に分割します。

構文
call "CBL_SPLIT_FILENAME" using     sj-param
                                         split-buffer
                               returning status-code
パラメータ
sj-param 次の従属項目を含む、cblt-splitjoin-buf としてあらかじめ定義されたグループ項目
cblte-sj-param-length cblt-x2-compx
cblte-sj-split-join-flag1 cblt-x1-compx
cblte-sj-split-join-flag2 cblt-x1-compx
cblte-sj-device-offset cblt-x2-compx
cblte-sj-device-length cblt-x2-compx
cblte-sj-basename-offset cblt-x2-compx
cblte-sj-basename-length cblt-x2-compx
cblte-sj-extension-offset cblt-x2-compx
cblte-sj-extension-length cblt-x2-compx
cblte-sj-total-length cblt-x2-compx
cblte-sj-split-buf-len cblt-x2-compx
cblte-sj-join-buf-len cblt-x2-compx
cblte-sj-first-component-length cblt-x2-compx
split-buffer pic x(n)
status-code キー』を参照してください。
入力時
cblte-sj-param-length 2 バイトの cblte-sj-param-length を含む、sj-param の長さ (バイト数)。cblte-sj-param-length の標準値は 24 です。
cblte-sj-split-join-flag1
ビット 説明
1 1 文字列はヌルで終了します。
0 文字列は空白文字で終了します。
0 1 新しいファイル名は大文字に変換されます。
0 元の大文字と小文字が保持されます。
cblte-sj-split-buf-len split-buffer の長さ
split-buffer 分割する文字列
終了時
cblte-sj-split-join-flag2 ビット 2    ファイル名に有効な空白文字がある場合に設定します。
ビット 1    パスにワイルドカードがある場合に設定します。
ビット 0    基本名または拡張子にワイルドカードがある場合に設定します。
cblte-sj-device-offset 1 から開始する split-buffer の開始
cblte-sj-device-length パス名の長さ。パス名がない場合はゼロになります。長さには名前の後に続くコロン (:) も含まれます。
cblte-sj-basename-offset 1 から開始する split-buffer の基本名の開始
cblte-sj-basename-length 基本名の長さ。基本名がない場合はゼロになります。長さには名前に続くピリオド (.) は含まれません。
cblte-sj-extension-offset 1 から開始する split-buffer の拡張子の開始
cblte-sj-extension-length 拡張子の長さ。拡張子がない場合はゼロになります。長さには、拡張子の前のピリオド (.) は含まれません。
cblte-sj-total-length 文字列内の合計文字数
cblte-sj-first-component-length 最初のバックスラッシュ(\)、スラッシュ(/)またはコロン(:)を含む合計文字数。split-buffer にこれらの文字が含まれない場合は、このパラメータが path-len になります。
split-buffer cblte-sj-split-join-flag1 のビット 0 が設定されている場合は、このルーチンがアルファベットのファイル名を大文字に変換します。cblte-sj-split-join-flag1 のビット 1 を使用せず、split-buffer が埋込めみの空白文字または引用符を含む引用符付きの名前である場合は、不要な引用符は削除されます。
status-code 戻り状態
0 成功
4 無効なファイル名
コメント

このルーチンを使用してファイル名のアルファベットをすべて大文字に変更するには、cblte-sj-split-join-flag1 の LSB (ビット 0) を設定します。このビットを設定しない場合は、大文字と小文字の別は保持されます。

このルーチンは、ヌルで終了する文字列または空白文字で終了する文字列のどちらも受け入れることができます。cblte-sj-split-join-flag1 の 2 番目の LSB (ビット 1) を設定すると、ルーチンはヌルで終了する文字列とみなします。このビットを設定しない場合は、空白文字で終了する文字列とみなされます。

ファイル名に 2 つ以上のピリオド (.) がある場合 (パス名のピリオド (.) は含まない)、返された拡張子は、最後のピリオド (.) とファイル名の最後の文字で構成されます。基本名には、最後のピリオド (.) を除いたすべてが含まれます。

拡張子が空白文字の場合に、拡張子のないファイル名と空白文字の拡張子をもつファイル名 (最後の文字がピリオド (.) の基本名) を区別するには、 cblte-sj-extension-len が 1 となり、 cblte-sj-extsentions は最後のピリオド(.)指します。

します。

関連項目

CBL_JOIN_FILENAME

************************************************************
*                                                          *
*               (C) Micro Focus                                 *
*                                                          *
*                     SPLTJOIN.CBL                         *
*                                                          *
*  このプログラムはファイル名を構成要素の文字列            *
*  (CBL_SPLIT_FILENAME) に分けたり、結合して ファイル名    *
*  (CBL_JOIN_FILENAME) にすることができるルーチンの        *
*  例です。                                                *
*                                                          *
************************************************************

 working-storage section.

 78 environ          value "dos".

 01 split-buffer                          pic x(65).
 01 split-params                          cblt-splitjoin-buf.
     03  cblte-sj-param-length            cblt-x2-compx value 24.
     03  cblte-sj-split-join-flag1        cblt-x1-compx value 0.
     03  cblte-sj-split-join-flag2        cblt-x1-compx.
     03  cblte-sj-device-offset           cblt-x2-compx.
     03  cblte-sj-device-length           cblt-x2-compx.
     03  cblte-sj-basename-offset         cblt-x2-compx.
     03  cblte-sj-basename-length         cblt-x2-compx.
     03  cblte-sj-extension-offset        cblt-x2-compx.
     03  cblte-sj-extension-length        cblt-x2-compx.
     03  cblte-sj-total-length            cblt-x2-compx.
     03  cblte-sj-split-buf-len           cblt-x2-compx value 65.
     03  cblte-sj-join-buf-len            cblt-x2-compx value 65.
     03  cblte-sj-first-component-length  cblt-x1-compx.

 01 join-buffer              pic x(65).
 01 path-buffer              pic x(65).
 01 basename-buffer          pic x(65).
 01 extension-buffer         pic x(3) value "cbl".

 procedure division.

* 長さを設定
     move 65 to cblte-sj-split-buf-len
                cblte-sj-join-buf-len

* 空白文字で終了し、大文字に変換するフラグを設定
     move 1 to cblte-sj-split-join-flag1

$if environ = "unix"
     move "/dir/file.ext" to split-buffer
$else
     move "a:\dir\file.ext" to split-buffer

$end
     move 1 to splitjoin-flg1
     call "CBL_SPLIT_FILENAME" using split-params
                                     split-buffer

* ここで結合に必要なパラメータの大半を設定。

* 結合ではsplit-bufferの元の拡張子を
* extension-bufferの拡張子に置き換え、
* 結果をjoin-bufferに入れます。
     move 1 to extension-strt
     move 3 to extension-len
     call "CBL_JOIN_FILENAME" using split-params
                                    join-buffer
                                    split-buffer
                                    split-buffer
                                    extension-buffer

$if environ = "unix"
     if join-buffer = "/DIR/FILE.CBL" then
$else
     if join-buffer = "A:\DIR\FILE.CBL" then
$end
         display "first test passed"
     else
         display "first test failed"
     end-if

* 最初に分けないで結合を設定するのは難しいが、
* 必要なことです。

     move 1 to cblte-sj-device-offset
               cblte-sj-basename-offset
               cblte-sj-extension-offset

     move length of path-buffer to cblte-sj-device-length
     move length of basename-buffer 
                                to cblte-sj-basename-length	
     move length of extension-buffer 
                                to cblte-sj-extension-length
     move length of join-buffer to cblte-sj-join-buf-len

     move 0 to cblte-sj-split-join-flag1
     move 24 to cblte-sj-param-length

$if environ = "unix"
     move "/path" to path-buffer
$else
     move "c:\path" to path-buffer
$end
     move "basename" to basename-buffer

     move "ext" to extension-buffer

     call "CBL_JOIN_FILENAME" using split-params
                                    join-buffer
                                    path-buffer
                                    basename-buffer
                                    extension-buffer

$if environ = "unix"
     if join-buffer = "/path/basename.ext" then
$else
     if join-buffer = "c:\path\basename.ext" then
$end
         display "second test passed"
     else

         display "second test failed"
     end-if
  stop run.

X"91" 関数 46 - ヌル挿入の有効化

行順ファイルで x"20" 未満の値をもつデータの 4 文字の前へのヌル文字 (x"00") の挿入を有効化します。

構文
call x"91" using result                   function-code     
               parameter
パラメータ

result              pic x comp-x
function-code       pic x comp-x
parameter           ファイルの FD 名

入力時
function-code 値 46
parameter ファイル記述 (FD) で指定されたファイル識別子。現在開かれている行順ファイルを参照する必要があります。
終了時
result 呼び出しが成功した場合はゼロに設定されます。それ以外の場合は、ゼロ以外に設定されます。
コメント

ファイルに ASCII 以外のデータを含む場合は、ヌル挿入を有効化する必要があります。このファンクションは、ヌル挿入ランタイムスイッチ (N) の設定に関係なく、個々のファイルに対してヌル挿入を有効化します。

x"91" には多くのサポートルーチンが必要なため、このファンクションをプログラムに含めると、実行可能ファイルのサイズが非常に大きくなります。

 fd payroll-file 
      ... 
     call x"91" using result 
                      function-code 
                      payroll-file 

X"91" ファンクション 47 - ヌル挿入の無効化

行順ファイルで x"20" 未満の値をもつデータの文字の前へのヌル文字 (x"00") の挿入を無効化します。

構文
call x"91" using result                   function-code     
             parameter
パラメータ

result              pic x comp-x
function-code       pic x comp-x
parameter           ファイルの FD 名

入力時
function-code 値 47
parameter ファイル記述 (FD) で指定されたファイル識別子。現在開かれている行順ファイルを参照する必要があります。
終了時
result 呼び出しが成功した場合はゼロに設定されます。それ以外の場合は、ゼロ以外に設定されます。
コメント

このファンクションは、ヌル挿入ランタイムスイッチ (N) の設定に関係なく、個々のファイルに対してヌル挿入を無効化することができます。

ファイルが EXTERNAL として宣言されている場合は、このファンクションを使用できません。

x"91" には多くのサポートルーチンが必要なため、このファンクションをプログラムに含めると、実行可能ファイルの容量が非常に大きくなります。


X"91" ファンクション 48 - タブ挿入の有効化

行順ファイルでタブ文字の挿入を有効化します。

構文
call x"91" using result                   function-code     
             parameter
パラメータ

result              pic x comp-x
function-code       pic x comp-x
parameter           ファイルの FD 名

入力時
function-code 値 48
parameter ファイル記述 (FD) で指定されたファイル識別子。現在開いている行順ファイルを参照する必要があります。
終了時
result 呼び出しが成功した場合はゼロに設定されます。それ以外の場合は、ゼロ以外に設定されます。
コメント

入力時には、すべてのタブ文字は適切な数の空白文字に拡張されますが、ディスクへの出力時には、タブ停止位置の前の複数の空白文字がタブ文字に短縮されます。このファンクションは、タブ圧縮ランタイムスイッチ (T) の設定に関係なく、個々のファイルに対しタブ挿入を有効化します。

x"91" には多くのサポートルーチンが必要なため、このファンクションをプログラムに含めると、実行可能ファイルのサイズが非常に大きくなります。


X"91" ファンクション 49 - タブ挿入の無効化

行順ファイルへのタブ文字の挿入を無効化します。

構文
call x"91" using result                   function-code     
             parameter
パラメータ

result              pic x comp-x
function-code       pic x comp-x
parameter           ファイルの FD 名

入力時
function-code 値 49
parameter ファイル記述 (FD) で指定されたファイル識別子。現在開かれている行順ファイルを参照する必要があります。

終了時
result 呼び出しが成功した場合はゼロに設定されます。それ以外の場合は、ゼロ以外に設定されます。
コメント

このファンクションは、ヌル挿入ランタイムスイッチ (N) の設定に関係なく、個々のファイルに対してヌル挿入を無効化します。

x"91" には多くのサポートルーチンが必要なため、このファンクションをプログラムに含めると、実行可能ファイルのサイズが非常に大きくなります。


X"91" ファンクション 52 - 2 バイトのレコード終了記号の使用

指定した行順ファイルまたは相対ファイルで 2 バイトのレコード終了記号を使用します。

構文
call x"91" using result 
                 function-code 
                 parameter
パラメータ

result              pic x comp-x
function-code       pic x comp-x
parameter           ファイルの FD 名

入力時
function-code 値 52
parameter ファイル記述 (FD) で指定されたファイル識別子
終了時
result 呼び出しが成功した場合はゼロに設定されます。それ以外の場合は、ゼロ以外に設定されます。
コメント

使用するレコード終了記号は x"0D0A" (キャリッジリターン、ラインフィード) です。

x"91" には多くのサポートルーチンが必要なため、このファンクションをプログラムに含めると、実行可能ファイルの容量が非常に大きくなります。


X"91" ファンクション 53 - 1 バイトのレコード終了記号の使用

レコードを行順ファイルまたは相対ファイルに書込むときに、UNIX デフォルトの 1 バイトのレコード終了記号を復元します。

構文
call x"91" using result                   function-code     
             parameter
パラメータ

result              pic x comp-x
function-code       pic x comp-x
parameter           ファイルの FD 名

入力時
function-code 値 53
parameter ファイル記述 (FD) で指定されたファイル識別子
終了時
result 呼び出しの結果を示します。呼び出しが成功した場合はゼロに設定され、失敗した場合はゼロ以外の値に設定されます。
コメント

使用する 1 バイトのレコード終了記号は x"0A" (ラインフィード) です。

x"91" には多くのサポートルーチンが必要なため、このファンクションをプログラムに含めると、実行可能ファイルの容量が非常に大きくなります。



Copyright © 2002 Micro Focus International Limited. All rights reserved.
本書、ならびに使用されている固有の商標と商品名は国際法で保護されています。

前ページへREBUILD その他のトピック 次ページへ