COBOL行番号


アニメ『COBRA THE SPACE PIRATE』

左手のサイコガンは、なんと曲がるんですよね。
アンジェリーナ・ジョリー主演の「ウォンテッド」を見た時、サイコガンを思い出しました。曲がるってのが一番の魅力です。

ではCOBRAではなくCOBOLいきます。

前回Hello Worldを作りましたが、左側の空白部分に行番号がありません。

takk@ubu16:~/coboltest$ cat test.cob
      * コメント
      *
      *
      *
       IDENTIFICATION  DIVISION.
       PROGRAM-ID.     HELLO.
       PROCEDURE       DIVISION.
       DISPLAY "Hello World!".
       STOP   RUN.

takk@ubu16:~/coboltest$

この7列の空白部分に行番号を入れてコンパイルしてみましょう。
行番号はnlコマンドで作ります。

takk@ubu16:~/coboltest$ nl test.cob
     1        * コメント
     2        *
     3        *
     4        *
     5         IDENTIFICATION  DIVISION.
     6         PROGRAM-ID.     HELLO.
     7         PROCEDURE       DIVISION.
     8         DISPLAY "Hello World!".
     9         STOP   RUN.
    10
takk@ubu16:~/coboltest$

COBOLは10ずつ増える行番号が似合ってますので、10増やすようにnlコマンドに-iオプションを指定します。

takk@ubu16:~/coboltest$ nl -i10 test.cob
     1        * コメント
    11        *
    21        *
    31        *
    41         IDENTIFICATION  DIVISION.
    51         PROGRAM-ID.     HELLO.
    61         PROCEDURE       DIVISION.
    71         DISPLAY "Hello World!".
    81         STOP   RUN.
    91
takk@ubu16:~/coboltest$

先頭が1から始まってますので、10からに指定します。

takk@ubu16:~/coboltest$ nl -i10 -v10 test.cob
    10        * コメント
    20        *
    30        *
    40        *
    50         IDENTIFICATION  DIVISION.
    60         PROGRAM-ID.     HELLO.
    70         PROCEDURE       DIVISION.
    80         DISPLAY "Hello World!".
    90         STOP   RUN.
   100
takk@ubu16:~/coboltest$

次は左側を空白埋ではなく、0埋に変えましょう。

takk@ubu16:~/coboltest$ nl -i10 -v10 -nrz test.cob
000010        * コメント
000020        *
000030        *
000040        *
000050         IDENTIFICATION  DIVISION.
000060         PROGRAM-ID.     HELLO.
000070         PROCEDURE       DIVISION.
000080         DISPLAY "Hello World!".
000090         STOP   RUN.
000100
takk@ubu16:~/coboltest$

元々のテキストの左6桁は不要なので削除します。

takk@ubu16:~/coboltest$ cut -b7- < test.cob
* コメント
*
*
*
 IDENTIFICATION  DIVISION.
 PROGRAM-ID.     HELLO.
 PROCEDURE       DIVISION.
 DISPLAY "Hello World!".
 STOP   RUN.

takk@ubu16:~/coboltest$

くっつけます。

takk@ubu16:~/coboltest$ cut -b7- < test.cob | nl -i10 -v10 -nrz -w7
0000010 * コメント
0000020 *
0000030 *
0000040 *
0000050  IDENTIFICATION  DIVISION.
0000060  PROGRAM-ID.     HELLO.
0000070  PROCEDURE       DIVISION.
0000080  DISPLAY "Hello World!".
0000090  STOP   RUN.
0000100
takk@ubu16:~/coboltest$

行番号と本体の間に区切り文字(タブ)が入ってしまいました。
いっそのこと、タブを0に置換することにします。これでnlへ指定するオプションも減ります。

takk@ubu16:~/coboltest$ cut -b7- < test.cob | nl -nrz -w5 | sed 's/\t/0/'
000010* コメント
000020*
000030*
000040*
000050 IDENTIFICATION  DIVISION.
000060 PROGRAM-ID.     HELLO.
000070 PROCEDURE       DIVISION.
000080 DISPLAY "Hello World!".
000090 STOP   RUN.
000100
takk@ubu16:~/coboltest$

コンパイルしてみます。

takk@ubu16:~/coboltest$ !! > test2.cob
cut -b7- < test.cob | nl -nrz -w5 | sed 's/\t/0/' > test2.cob
takk@ubu16:~/coboltest$ cobc -x test2.cob
takk@ubu16:~/coboltest$ ./test2
Hello World!
takk@ubu16:~/coboltest$

ビルド、実行できました。

Leave a Reply

Your email address will not be published. Required fields are marked *

CAPTCHA