困ったとき

つまずくところは決まっています

ここに挙げたのは、このサンプル集を実機で動かして実際に踏んだものだけです。 症状から引いてください。

実行できない

sitcobol_bat.exe が見つからない、と言われる

run.bat は本体を3か所から探します。どこにも無いとこのメッセージが出ます。 次のどちらかで解決します。

  1. 環境変数 SITCOBOL_HOME にインストール先を設定する
    set SITCOBOL_HOME=C:\sitcobol
  2. サンプル集の直下に engine\ を作り、 sitcobol-standard_v11_x.x.x を展開する
置き場所は自由です

探索は common\sitcobol_env.bat がまとめて行います。 サンプル集をどこに展開しても run.bat は動きます。

「索引ファイル機能: スタンダード版では実行できません」と出る

索引ファイルと埋込みSQLは Pro 版の機能です。Standard 版で実行すると この警告が出て、書き込みが ファイルステータス=48 で失敗します。

該当するのは第8章の索引ファイル3本、第9章のSQL5本、第12章のマスタ関連、 実践サンプルのクイズゲーム(Pro版)です。サンプル一覧で 「Standardで動く」で絞り込むと、いま動かせるものだけが残ります。

文字が化ける・妙なエラーが出る

バッチを実行すると、身に覚えのない「認識されていません」が出る

chcp 65001 が有効な状態では、cmd.exe は UTF-8 で書かれた .bat の行の読み取り位置を誤ります。日本語が rem コメントにあるだけでも起きます。

実測

日本語のコメント行が2行(非ASCII 72バイト)あるだけで、無関係な 「〜は、内部コマンドまたは外部コマンド…として認識されていません」が 1件出ました。行が増えるほど誤エラーも増えます。

このサンプル集では次の決まりで回避しています。

同梱の .bat はこの決まりで書いてあります。 ご自分でバッチを足すときも、同じようにしてください。

バッチが1行目から動かない / 変な位置で切れる

.bat の改行が LF のみになっていると、cmd.exe は正しく解析できません。 Windows のバッチは CRLF でなければなりません。

同梱のファイルはすべて CRLF に揃えてあります。 エディタで編集して保存し直したあとに動かなくなった場合は、 改行コードが LF になっていないか確かめてください。

自作の .ps1 が日本語のところで構文エラーになる

Windows PowerShell 5.1 は、BOM の無い .ps1 を CP932 として読みます。 UTF-8 で保存した日本語入りスクリプトは文字化けし、文字列が閉じずに構文エラーになります。

まとめ

.bat.cob は UTF-8 BOM無し.ps1 は UTF-8 BOM有り。いずれも改行は CRLF。

コマンドプロンプトで日本語が化ける

chcp 65001 を実行してから走らせてください。COBOL のソースも DISPLAY の出力も UTF-8 です。同梱の run.bat は自動で設定します。

思った結果にならない

半角で入れたはずの文字が全角になる

英数字項目(PIC X)から日本語項目(PIC N)へ転記すると、 空白も含めて全角に変換されます。仕様どおりの動作です。 第12章の帳票で「ノートパソコン 15インチ」が 「ノートパソコン 15インチ」になるのはこれが理由です。

第8章のサンプルが「ファイルが無い」で失敗する

第8章は「作成」を先に実行しないと動きません。 読み書きする 果物ファイル は「作成」が作るもので、 最初から入っているわけではありません。

サンプルすること
1〜ファイルの作成 OPEN OUTPUT でファイルを新しく作る
2〜ファイルの入力 OPEN INPUT で読む(1の後でないと失敗)
3〜ファイルの更新 OPEN I-O で書き換える(1の後でないと失敗)

順・CSV・TSV・索引の4系統があり、系統ごとに扱うファイルが別です (果物ファイル.txt / .csv / .tsv / .sqlite3)。CSV の「入力例」を動かしたいなら、先に CSV の「作成例」を実行してください。順ファイルの作成例では代わりになりません。

一覧は実行順に並んでいます

第8章のサンプル一覧は、上から順に実行すれば 成り立つように並べてあります。各サンプルのページには「前提」も書いてあります。

第9章のSQLサンプルが失敗する

第9章は説明書の例1から順に実行してください。 例1 が TESTDB.sqlite3 に表 address_book を作り、 以降の例はその表を使います。表が無ければ挿入も検索もできません。

説明書サンプル前提
19.2.1表の作成
29.2.2データの挿入例1
39.2.3例外宣言例1
49.2.4カーソル宣言例2(行が無いと取り出せません)
59.2.5データの検索例2(行が無いと取り出せません)

いずれも Pro 版が必要です。

マスタが無いと言われる(第12章)

第12章は 2 段構えです。先に 全マスタ作成.bat (在庫・商品・顧客・倉庫の4つを作る)を実行してから、 バッチ処理サンプル.bat を実行してください。 帳票の作成には、在庫マスタ更新が出す 発注.dat欠品.dat も必要です。

12_4(改善版)を動かすには、マスタを手でコピーします

12_4_バッチ処理例の改善 にはマスタを作るプログラムが入っておらず、 バッチもマスタを用意しません(複製するのはトランザクションCSVだけです)。 そのため次の手順が必要です。

  1. 12_3_バッチ処理例全マスタ作成.bat を実行する
  2. できた4つの *.sqlite312_4_バッチ処理例の改善 へコピーする
  3. バッチ処理サンプル2.bat を実行する

改善版の帳票が「不明」や 0 ばかりになる

12_4 のプログラムは、ファイル名を環境変数から受け取りますACCEPT ... FROM ENVIRONMENT)。 バッチ処理サンプル2.bat を通さずに .cob を単体で実行すると、 環境変数が空のまま動いて中身の無い帳票ができます。 改善版は必ずバッチから実行してください。

組込みサブルーチンのサンプルが途中で止まる

第10章のサンプルは CBL_CREATE_DIRtmp を作ります。 前回の実行で tmp が残っていると失敗して停止します。 実行前に tmp フォルダを消してください。

SIT COBOL 固有の落とし穴

症状理由と対処
GOBACK が通らない SIT COBOL は GOBACK に対応していません。 副プログラムの復帰は EXIT PROGRAM、 主プログラムの終了は STOP RUN を使います。
CALL したプログラムが見つからない SIT COBOL の CALL "NAME" は PROGRAM-ID ではなく、 同じフォルダの NAME.cob というファイル名で解決します。 呼ぶ側と呼ばれる側を同じフォルダに置き、 CALL の文字列とファイル名(拡張子なし)を一致させてください。
索引ファイルの中身が読めない 索引ファイルの実体は SQLite3 です。 records(key, data) の1表に、キーとレコード全体を 固定長文字列で持ちます。
フォルダ名の括弧でコマンドが失敗する 第12章_コマンド(バッチ)での利用方法 のように 名前に () が入ると、cmd /c "パス" の形では 失敗することがあります。エクスプローラからのダブルクリックは問題ありません。 スクリプトから呼ぶときは引用符を二重にしてください。
絵文字を入れたい PIC X(1) に絵文字を保持できます。 ブラックジャックのサンプルはスートに ♠ ♥ ♦ ♣ を使っています。

それでも解決しないとき

機能説明書で該当章を確認するか、 sit-cobol@sit11.com へご連絡ください。