早見表

手を止めずに引く

サンプルを読むときに毎回調べ直すものを集めました。 正式な定義は機能説明書にあります。

固定形式の桁

SIT COBOL のソースは固定形式です。何桁目に書くかで意味が変わります。

1-6 一連番号7 標識8-11 A領域12-72 B領域73- 識別
領域何を書くか
1-6一連番号領域 行番号。処理には影響しない。10 刻みで振るのが慣習
7標識領域 * または / = 注記行 / - = 継続行 / 空白 = ふつうの行
8-11A領域 DIVISION・SECTION・段落名・0177 のレベル番号・FD
12-72B領域 手続きの文、02 以降のレベル番号
73-識別領域無視される
日本語を書くときの数え方

桁は文字数ではなく表示幅で数えます。全角文字は2桁分です。 等幅の日本語フォント(MS ゴシックなど)でないと画面上で桁が合いません。

PIC 句

記号意味
9数字1桁PIC 9(5) → 00000〜99999
X英数字1桁PIC X(10)
N日本語1文字PIC N(15)
A英字1桁PIC A(4)
S符号つき(先頭に付ける)PIC S9(5)
V小数点の位置(場所を取らない)PIC S9(5)V99
(n)直前の記号を n 回PIC 9(7) = PIC 9999999

編集用の記号(表示のために整える)

記号働き
Z頭の 0 を空白にするPIC ZZZ9 → 「 12」
,桁区切りを入れるPIC ZZ,ZZ9 → 「12,345」
.小数点を表示するPIC ZZ9.99
*頭の 0 を * にするPIC ***9 → 「**12」
/その位置に / を入れるPIC 99/99/99 → 「25/03/14」
Bその位置に空白を入れるPIC NNBNN
- +符号を表示するPIC -ZZZ9

ファイルの種類

ORGANIZATION実体サンプル
SEQUENTIAL固定長の連続したデータ Standard 順ファイル
LINE SEQUENTIAL行単位のテキスト Standard 帳票の出力
LINE SEQUENTIAL WITH CSV CSV。SIT COBOL 独自の書き方 Standard CSVファイル
INDEXED SQLite3 ファイルrecords(key, data) の1表 Pro版 索引ファイル

ファイル状態(FILE STATUS)

サンプルでは FILE STATUS IS ファイルステータス と宣言して確認しています。

意味
00正常に終わった
10読むデータが無くなった(AT END
23該当するレコードが無い(INVALID KEY
48書き込めない。 Standard版で索引ファイルに書こうとしたときにこの値になります

すべての値は第8章を参照してください。

画面(SCREEN SECTION)

画面は半角で 80桁 × 25行 の固定サイズです。

色の番号

COLOR に指定する番号です。商品在庫管理のサンプルは 78 レベルの定数として名前を付けています。

番号番号
04
15紫(マゼンタ)
26
3水色7

CRT-STATUS の値

画面から戻ってきたときに、どのキーが押されたかを持ちます。

意味
0確認画面(SCREEN CONFIRM)で「はい」が選ばれた
1PF1 が押された(サンプルでは「前頁」)
2PF2 が押された(サンプルでは「次頁」)
3PF3 が押された(サンプルでは「戻る」)

組込み関数

FUNCTION 名前(引数) の形で使います。 第11章のサンプルで、次のすべてが実際に確かめられています。

数と計算

MAX MIN MEAN MEDIAN MIDRANGE RANGE
SUM相当: MEAN / STANDARD-DEVIATION / VARIANCE
INTEGER INTEGER-PART MOD REM
SQRT LOG LOG10 FACTORIAL RANDOM
ANNUITY PRESENT-VALUE
ORD ORD-MAX ORD-MIN NUMVAL NUMVAL-C

文字と日付

UPPER-CASE LOWER-CASE REVERSE TRIM
LENGTH CHAR
CURRENT-DATE WHEN-COMPILED
DATE-OF-INTEGER INTEGER-OF-DATE INTEGER-OF-DAY

三角関数

SIN COS TAN ASIN ACOS ATAN

使い方の例

MOVE FUNCTION UPPER-CASE(名前) TO 大文字名
MOVE FUNCTION CURRENT-DATE(1:8) TO 今日
IF FUNCTION MOD(数, 2) = 0

組込みサブルーチン

CALL "名前" USING ... で呼びます。ファイルやフォルダの操作、 プロセス番号の取得ができます。 第10章のサンプルにすべて出てきます。

名前すること
CBL_GET_CURRENT_DIRいまのフォルダを取得する
CBL_CHANGE_DIRフォルダを移動する
CBL_CREATE_DIRフォルダを作る
CBL_CHECK_FILE_EXISTファイルがあるか調べる
CBL_COPY_FILEファイルを複製する
CBL_RENAME_FILEファイルの名前を変える
CBL_DELETE_FILEファイルを消す
CBL_GET_PID自分のプロセス番号を取る
CBL_GET_PPID呼び出し元のプロセス番号を取る
作業ファイルの名前をぶつけない

第12章の改善版は CBL_GET_PPID で取った番号をファイル名の頭に付けて、 同じバッチを同時に動かしても壊れないようにしています。

ファイルの保存形式

種類文字コード改行理由
.cobUTF-8 BOM無しCRLFSIT COBOL の前提
.batUTF-8 BOM無しCRLF 必須 LF だけだと cmd.exe が解析に失敗する
.ps1UTF-8 BOM有りCRLF PowerShell 5.1 は BOM 無しを CP932 として読む

同梱のファイルはこの決まりに揃えてあります。 くわしくは困ったときを参照してください。