困ったとき
つまずくところは決まっています
ここに挙げたのは、このサンプル集を実機で動かして実際に踏んだものだけです。 症状から引いてください。
実行できない
sitcobol_bat.exe が見つからない、と言われる
各 run.bat は本体を3か所から探します。どこにも無いとこのメッセージが出ます。
次のどちらかで解決します。
- 環境変数
SITCOBOL_HOMEにインストール先を設定する
set SITCOBOL_HOME=C:\sitcobol - サンプル集の直下に
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のコメントは ASCII で書く- 実行時に出したい日本語は
common\msg\*.txtに置き、typeコマンドで表示する chcp 65001は@echo offの直後に置く
同梱の .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 を作り、
以降の例はその表を使います。表が無ければ挿入も検索もできません。
| 順 | 説明書 | サンプル | 前提 |
|---|---|---|---|
| 1 | 9.2.1 | 表の作成 | — |
| 2 | 9.2.2 | データの挿入 | 例1 |
| 3 | 9.2.3 | 例外宣言 | 例1 |
| 4 | 9.2.4 | カーソル宣言 | 例2(行が無いと取り出せません) |
| 5 | 9.2.5 | データの検索 | 例2(行が無いと取り出せません) |
いずれも Pro 版が必要です。
マスタが無いと言われる(第12章)
第12章は 2 段構えです。先に 全マスタ作成.bat
(在庫・商品・顧客・倉庫の4つを作る)を実行してから、
バッチ処理サンプル.bat を実行してください。
帳票の作成には、在庫マスタ更新が出す 発注.dat と
欠品.dat も必要です。
12_4_バッチ処理例の改善 にはマスタを作るプログラムが入っておらず、
バッチもマスタを用意しません(複製するのはトランザクションCSVだけです)。
そのため次の手順が必要です。
12_3_バッチ処理例で全マスタ作成.batを実行する- できた4つの
*.sqlite3を12_4_バッチ処理例の改善へコピーする バッチ処理サンプル2.batを実行する
改善版の帳票が「不明」や 0 ばかりになる
12_4 のプログラムは、ファイル名を環境変数から受け取ります
(ACCEPT ... FROM ENVIRONMENT)。
バッチ処理サンプル2.bat を通さずに .cob を単体で実行すると、
環境変数が空のまま動いて中身の無い帳票ができます。
改善版は必ずバッチから実行してください。
組込みサブルーチンのサンプルが途中で止まる
第10章のサンプルは CBL_CREATE_DIR で tmp を作ります。
前回の実行で 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 へご連絡ください。