章の一覧全12章
このページの目次11
- 10.1 概要
- 10.2 カレントディレクトリの取得(CBL_GET_CURRENT_DIR)
- 10.3 カレントディレクトリの変更(CBL_CHANGE_DIR)
- 10.4 ファイルのコピー(CBL_COPY_FILE)
- 10.5 ファイル名の変更(CBL_RENAME_FILE)
- 10.6 ファイルの削除(CBL_DELETE_FILE)
- 10.7 ファイルの存在確認およびファイル情報の取得(CBL_CHECK_FILE_EXIST)
- 10.8 ディレクトリの作成(CBL_CREATE_DIR)
- 10.9 ディレクトリの削除(CBL_DELETE_DIR)
- 10.10 プロセスIDの取得(CBL_GET_PID)
- 10.11 親プロセスIDの取得(CBL_GET_PPID)
第10章 組み込みサブルーチン
10.1 概要
SIT COBOLは、Windowsのファイルやディレクトリについての操作機能を、組み込みサブルーチンとして提供している。
提供しているサブルーチンは下記のとおりである。
- カレントディレクトリの取得(CBL_GET_CURRENT_DIR)
- カレントディレクトリ変更機能(CBL_CHANGE_DIR)
- ファイルのコピー(CBL_COPY_FILE)
- ファイル名の変更(CBL_RENAME_FILE)
- ファイルの削除(CBL_DELETE_FILE)
- ファイルの存在チェックおよびファイル情報の取得(CBL_CHECK_FILE_EXIST)
- ディレクトリの作成(CBL_CREATE_DIR)
- ディレクトリの削除(CBL_DELETE_DIR)
- 自分自身のプロセスIDを取得する(CBL_GET_PID)
- 自分自身の親のプロセスIDを取得する(CBL_GET_PPID)
上記のうち、プロセスID関連以外の組み込みサブルーチンの名前および機能については、opensource COBOLに準拠している。
(サンプルプログラム名:組み込みサブルーチン.cob)
10.2 カレントディレクトリの取得(CBL_GET_CURRENT_DIR)
カレントディレクトリの取得を行うには、CBL_GET_CURRENT_DIRを使用する。
書き方
CALL "CBL_GET_CURRENT_DIR" USING
BY VALUE 0
BY VALUE { 定数-1 | データ名-1 }
BY REFERENCE データ名-2
構文規則
- 第1引数は使用されないが、BY VALUEで指定する必要がある。
- 第2引数は、BY VALUEで指定する必要がある。
- 第3引数は、BY REFERCENCEで指定する必要がある。(*1)
- データ名-1は修飾が可能である。
(*1)この組み込みサブルーチンに限り、BY REFERENCEが指定されていなくとも、BY REFERENCEが指定されているとみなす。
一般規則
- カレントディレクトリの完全修飾パス名が取得され、データ名-2に、定数1またはデータ名-1で指定した文字長の文字が保存される。
- 文字長(定数-1またはデータ名-1に指定された値)は、データ名-2の項目長を超えてはならない。
- 文字長(定数-1またはデータ名-1に指定された値)がデータ名-2の項目長よりも小さい場合、現在のディレクトリパスがデータ名-2に左寄せされ、文字長分まで空白が埋められる。データ名-2のうち文字長を超えた部分は変更されない。
- 操作の戻り値は、RETURN-CODE 特殊レジスタに返され、成功(=0)または 失敗(=128)のいずれかである。ただし、第1引数の値がゼロ以外の場合、RETURN-CODE は 129 となる。
注意
SIT COBOLは、実行するプログラムの存在するディレクトリが、初期のカレントディレクトリとなる。
SIT COBOLエディタによって、まだどこにも書き出されていないプログラムが実行された場合は、sitcobol.exe が存在するディレクトリが、カレントディレクトリとなる。
使い方
000000 01 CURR-DIR PIC X(100).
000000 :
000000 MOVE ALL "*" TO CURR-DIR.
000000 CALL "CBL_GET_CURRENT_DIR" USING VALUE 0 VALUE 50 CURR-DIR.
000000 DISPLAY "カレント: " CURR-DIR *> カレントディレクトリが表示される。
上記は、カレントディレクトリを、50バイトのみ取得しようとしている。したがって、CURR-DIRの51バイト以降は”*“のままである。
10.3 カレントディレクトリの変更(CBL_CHANGE_DIR)
カレントディレクトリを変更するには、CBL_CHANGE_DIRを使用する。
書き方
CALL "CBL_CHANGE_DIR" USING { 定数-1 | データ名-1}
構文規則
- 定数-1は、文字定数でなければならない。
- データ名-1は、英数字項目または集団項目でなければならない。
- データ名-1は、修飾することができる。
(*) この組み込みサブルーチンに限り、定数-1、データ名-1は、暗にBY CONTENT句が指定されているものとみなす。
一般規則
- このルーチンは、定数-1またはデータ名-1で指定された値を現在のディレクトリにする。
- ディレクトリの変更は、プログラムの終了がするか、または別の CBL_CHANGE_DIRが実行されるまで有効である。
- 操作の戻り値は、RETURN-CODE 特殊レジスタに返され、成功(=0)または 失敗(=128)のいずれかである。
注意
SIT COBOLは、実行するプログラムの存在するディレクトリが、初期のカレントディレクトリとなる。
SIT COBOLエディタによって、まだどこにも書き出されていないプログラムが実行された場合は、sitcobol.exe が存在するディレクトリが、カレントディレクトリとなる。
使い方
00000 CALL "CBL_CHANGE_DIR" USING "./tmp".
上記は、カレントディレクトリを、相対パス指定で”./tmp”を指定した例である。ディレクトリとして、’/‘を使用しているが、もちろん、”.\tmp” と指定してもよいが、’\‘記号が特殊文字と認識されるケースがあるので、’/‘を推奨する。
10.4 ファイルのコピー(CBL_COPY_FILE)
ファイルをコピーするには、CBL_COPY_FILEを使用する。
書き方
CALL "CBL_COPY_FILE" USING { 定数-1 | データ名-1 } {定数-2 | データ名-2 }
構文規則
- 定数-1、定数-2は、文字定数でなければならない。
- データ名-1、データ名-2は、英数字項目または集団項目でなければならない。
(*) この組み込みサブルーチンに限り、それぞれのパラメタは、暗にBY CONTENT句が指定されているものとみなす。
一般規則
- 引数-2で指定されたパスがファイル名の場合は、引数-1のパスで指定されたファイルを、引数-2にコピーする。
- 引数-2で指定されたパスがディレクトリ名の場合は、引数-1のパスで指定されたファイルを、名前を変えずに引数-2のディレクトリ配下にコピーする。
- 操作の戻り値は、RETURN-CODE 特殊レジスタに返され、成功(=0)または 失敗(=128)のいずれかである。
使い方
000000 CALL "CBL_COPY_FILE" USING "./PROGRAM.cob" "D:/save".
上記では、カレントディレクトリにある’PROGRAM.cob’を、Dドライブの/saveというディレクトリ配下にコピーしている。
10.5 ファイル名の変更(CBL_RENAME_FILE)
ファイル名を変更するには、CBL_RENAME_FILEを指定する。
書き方
CALL "CBL_RENAME_FILE" USING { 定数-1 | データ名-1 } {定数-2 | データ名-2 }
構文規則
- 定数-1、定数-2は、文字定数でなければならない。
- データ名-1、データ名-2は、英数字項目または集団項目でなければならない。
(*) この組み込みサブルーチンに限り、それぞれのパラメタは、暗にBY CONTENT句が指定されているものとみなす。
一般規則
- 引数-1のパスで指定されたファイル名を、引数-2のパスで指定されたファイル名に変更する。
- 引数-1で指定したファイルの親までのパス名と、引数-2で指定したファイルの親までのパス名は同じでなくともよい。その場合は、引数-1のパスで指定したファイルが、引数-2のパスで指定したファイルにコピーされ、その後、引数-1のパスで指定したファイルは削除される。
- 操作の戻り値は、RETURN-CODE 特殊レジスタに返され、成功(=0)または 失敗(=128)のいずれかである。
使い方
000000 CALL "CBL_RENAME_FILE" USING "./PROGRAM.cob" "./PROGRAM_SAVE.cob".
上記では、カレントディレクトリにある’PROGRAM.cob’を、‘PROGRAM_SAVE.cob’と名前を変えている。
000000 CALL "CBL_RENAME_FILE" USING "./PROGRAM.cob" "D:/save/PROGRAM_SAVE.cob".
上記では、カレントディレクトリにある’PROGRAM.cob’を、Dドライブの/saveというディレクトリ配下に名前を変えて移動している。
10.6 ファイルの削除(CBL_DELETE_FILE)
ファイルを削除するには、CBL_DELETE_FILEを使う。
書き方
CALL "CBL_DELETE_FILE" USING { 定数-1 | データ名-1 }
構文規則
- 定数-1、文字定数でなければならない。
- データ名-1は、英数字項目または集団項目でなければならない。
(*) この組み込みサブルーチンに限り、それぞれのパラメタは、暗にBY CONTENT句が指定されているものとみなす。
一般規則
- 定数-1またはデータ名-1で指定されたファイルを削除する。
- 操作の戻り値は、RETURN-CODE 特殊レジスタに返され、成功(=0)または 失敗(=128)のいずれかである。
使い方
000000 CALL "CBL_DELETE_FILE" USING "./TMP-DATA.dat".
上記では、カレントディレクトリにある’TMP-DATA.dat’を削除する。
10.7 ファイルの存在確認およびファイル情報の取得(CBL_CHECK_FILE_EXIST)
ファイルの存在確認、およびファイル情報(ファイルサイズ、更新日付)を取得するには、CBL_CHECK_FILE_EXISTを使う。
書き方
CALL "CBL_CHECK_FILE_EXIST" USING { 定数-1 | データ名-1 } データ名-2
構文規則
- 定数-1は、文字定数でなければならない。
- データ名-1は、英数字項目または集団項目でなければならない。
- データ名-2は、次のようなレコードでなければならない。
01 ファイル情報.
05 サイズ PIC 9(18) COMP. *> 単位はバイト
05 更新年月日.
07 DD PIC 9(2) COMP. *> 更新年月日の日(DD)
07 MM PIC 9(2) COMP. *> 更新年月日の月(MM)
07 YYYY PIC 9(4) COMP. *> 更新年月日の年(YYYY)
05 更新時刻.
07 HH PIC 9(2) COMP. *> 更新時刻の時(HH)
05 MM PIC 9(2) COMP. *> 更新時刻の分(MM)
05 SS PIC 9(2) COMP. *> 更新時刻の秒(SS)
05 FILLER PIC 9(2) COMP. *> 未使用領域
(*) この組み込みサブルーチンに限り、第一パラメタには、暗にBY CONTENT句が、第二パラメータは、暗にBY REFERENCEが指定されているものとみなす。
一般規則
- 定数-1またはデータ名-1の値で指定されたファイルの情報を取得し、データ名-2の領域に設定する。
- 操作の戻り値は、RETURN-CODE 特殊レジスタに返され、成功時には0が設定される。ファイル情報が取得できなかったときは35の値が、2つ未満の引数が指定されたときは、128の値が設定される。(35の値が返されたときは、ファイルが存在しないとみなすことができる)
使い方
000000 CALL "CBL_CHECK_FILE_EXIST" USING "./TMP-DATA.dat" ファイル情報.
上記では、カレントディレクトリにある’TMP-DATA.dat’のファイル情報がデータ「ファイル情報」に設定される。
10.8 ディレクトリの作成(CBL_CREATE_DIR)
ディレクトリを作成するには、CBL_CREATE_DIRを使う。
書き方
CALL "CBL_CREATE_DIR" USING { 定数-1 | データ名-1 }
構文規則
- 定数-1、文字定数でなければならない。
- データ名-1は、英数字項目または集団項目でなければならない。
(*) この組み込みサブルーチンに限り、それぞれのパラメタは、暗にBY CONTENT句が指定されているものとみなす。
一般規則
- 定数-1またはデータ名-1の値を持つディレクトリを作成する。
- 作成できるディレクトリは、定数-1またはデータ名-1で指定されたパスの最下層 (最後) のディレクトリのみである。他のディレクトリは既に存在していなければならない。
- 操作の戻り値は、RETURN-CODE 特殊レジスタに返され、成功(=0)または 失敗(=128)のいずれかである。
使い方
000000 CALL "CBL_CREATE_DIR" USING "./tmp/first".
上記では、カレントディレクトリ配下の’tmp’というディレクトリ配下に新たなディレクトリ’first’を作成している。もし、カレントディレクトリ配下に’tmp’ディレクトリが存在しない場合には、ディレクトリの作成は失敗する。
10.9 ディレクトリの削除(CBL_DELETE_DIR)
ディレクトリを削除するには、CBL_DELETE_DIRを使う。
書き方
CALL "CBL_DELETE_DIR" USING { 定数-1 | データ名-1 }
構文規則
- 定数-1、文字定数でなければならない。
- データ名-1は、英数字項目または集団項目でなければならない。
(*) この組み込みサブルーチンに限り、それぞれのパラメタは、暗にBY CONTENT句が指定されているものとみなす。
一般規則
- 定数-1またはデータ名-1の値を持つディレクトリを削除する。
- 削除できるディレクトリは、定数-1またはデータ名-1で指定されたパスの最下層 (最後) のディレクトリのみである。他のディレクトリは既に存在していなければならない。
- 削除するディレクトリ配下には、ファイルもディレクトリも存在してはならない。
- 操作の戻り値は、RETURN-CODE 特殊レジスタに返され、成功(=0)または 失敗(=128)のいずれかである。
使い方
000000 CALL "CBL_DELETE_DIR" USING "./tmp/first".
上記では、カレントディレクトリ配下の’tmp’というディレクトリ配下のディレクトリ’first’を削除している。もし、カレントディレクトリ配下に’tmp’ディレクトリが存在しない場合、あるいは、’./tmp/first’配下にファイル等が存在していた場合には、ディレクトリの削除は失敗する。
10.10 プロセスIDの取得(CBL_GET_PID)
自分自身のプロセスIDを取得するには、CBL_GET_PIDを使う。
書き方
CALL "CBL_GET_PID" USING データ名-1
構文規則
- データ名-1は、5桁以上の数字項目でなければならない。
一般規則
- 自分自身のプロセスIDを取得してデータ名-1に値を返却する。
使い方
000000 01 PID PIC 9(5).
:
000000 CALL "CBL_GET_PID" USING PID.
上記では、PIDに自分自身のプロセスIDが設定される。
10.11 親プロセスIDの取得(CBL_GET_PPID)
自分自身の親のプロセスIDを取得するには、CBL_GET_PPIDを使う。
書き方
CALL "CBL_GET_PPID" USING データ名-1
構文規則
- データ名-1は、5桁以上の数字項目でなければならない。
一般規則
- 自分自身の親のプロセスIDを取得してデータ名-1に値を返却する。
使い方
000000 01 PPID PIC 9(5).
:
000000 CALL "CBL_GET_PPID" USING PPID.
上記では、PIDに自分自身の親のプロセスIDが設定される。
