【COBOL】数値変数に入れたLOW-VALUEはLOW-VALUEなの?

変数(数値)に入れたLOW-VALUEはLOW-VALUEで真になります

実はCOBOLを始めたのが今年からなので色々わかっていない。

このような些細な事はちょろっとお試しプログラムを書けばわかるのですが、

自由にコンパイルできない(個人用環境がない)現場に勤めているので、家で試してみました。

環境

cobc (OpenCOBOL) 1.1.0

結論

ただの符号付数字の変数を除き、LOW-VALUE入れればLOW-VALUEで真になる。

(処理系によって違いがあるかもですが・・・)

ソースコード

       IDENTIFICATION DIVISION.
       PROGRAM-ID. TEST_DATA.
       ENVIRONMENT DIVISION.
       DATA DIVISION.
         WORKING-STORAGE SECTION.
         01 GP.
      *    文字
           03 STR                       PIC X(4).
      *    符号なし数字4桁
           03 NM                        PIC 9(4).
      *    符号つき数字4桁(3+符号)
           03 NM_S4                     PIC S9(4).
      *    符号つき数字4桁(バイナリ)2バイト
           03 NM_4B                     PIC S9(4) COMP.
      *    符号つき数字9桁(バイナリ)4バイト
           03 NM_9B                     PIC S9(9) COMP.
      *    符号つき数字3桁(パックデシマル)2バイト
      *    567 -> 56 7+
           03 NM_3C3                    PIC S9(3) COMP-3.
      *    符号つき数字4桁(パックデシマル)3バイト
      *    5678 -> 05 67 8+
           03 NM_4C3                    PIC S9(4) COMP-3.
       PROCEDURE DIVISION.

      * MAIN SECTION
         MAIN-S.
      *
      * -- LOW-VALUE --
           MOVE LOW-VALUE               TO GP.
      *    文字
           IF STR = LOW-VALUE
             THEN
               DISPLAY 'STR = LOW-VALUE'
             ELSE
               DISPLAY 'STR NOT = LOW-VALUE'
           END-IF.
      *
      *    符号なし数字4桁
           IF NM = LOW-VALUE
             THEN
               DISPLAY 'NM = LOW-VALUE'
             ELSE
               DISPLAY 'NM NOT = LOW-VALUE'
           END-IF.
      *
      *    符号つき数字4桁(3+符号)
           IF NM_S4 = LOW-VALUE
             THEN
               DISPLAY 'NM_S4 = LOW-VALUE'
             ELSE
               DISPLAY 'NM_S4 NOT = LOW-VALUE'
           END-IF.
      *
      *    符号つき数字4桁(バイナリ)2バイト
           IF NM_4B = LOW-VALUE
             THEN
               DISPLAY 'NM_4B = LOW-VALUE'
             ELSE
               DISPLAY 'NM_4B NOT = LOW-VALUE'
           END-IF.
      *
      *    符号つき数字3桁(パックデシマル)2バイト
           IF NM_3C3 = LOW-VALUE
             THEN
               DISPLAY 'NM_3C3 = LOW-VALUE'
             ELSE
               DISPLAY 'NM_3C3 NOT = LOW-VALUE'
           END-IF.
      *
      * -- SPACE --
           MOVE SPACE                   TO GP.
      *    文字
           IF STR = SPACE
             THEN
               DISPLAY 'STR = SPACE'
             ELSE
               DISPLAY 'STR NOT = SPACE'
           END-IF.
      *
      *    符号なし数字4桁
           IF NM = SPACE
             THEN
               DISPLAY 'NM = SPACE'
             ELSE
               DISPLAY 'NM NOT = SPACE'
           END-IF.
      *
      *    符号つき数字4桁(3+符号)
           IF NM_S4 = SPACE
             THEN
               DISPLAY 'NM_S4 = SPACE'
             ELSE
               DISPLAY 'NM_S4 NOT = SPACE'
           END-IF.
      *
      *    符号つき数字4桁(バイナリ)2バイト
           IF NM_4B = SPACE
             THEN
               DISPLAY 'NM_4B = SPACE'
             ELSE
               DISPLAY 'NM_4B NOT = SPACE'
           END-IF.
      *
      *    符号つき数字3桁(パックデシマル)2バイト
           IF NM_3C3 = SPACE
             THEN
               DISPLAY 'NM_3C3 = SPACE'
             ELSE
               DISPLAY 'NM_3C3 NOT = SPACE'
           END-IF.
      *
      *
      * -- ZERO --
           MOVE ZERO                    TO GP.
      *    文字
           IF STR = ZERO
             THEN
               DISPLAY 'STR = ZERO'
             ELSE
               DISPLAY 'STR NOT = ZERO'
           END-IF.
      *
      *    符号なし数字4桁
           IF NM = ZERO
             THEN
               DISPLAY 'NM = ZERO'
             ELSE
               DISPLAY 'NM NOT = ZERO'
           END-IF.
      *
      *    符号つき数字4桁(3+符号)
           IF NM_S4 = ZERO
             THEN
               DISPLAY 'NM_S4 = ZERO'
             ELSE
               DISPLAY 'NM_S4 NOT = ZERO'
           END-IF.
      *
      *    符号つき数字4桁(バイナリ)2バイト
           IF NM_4B = ZERO
             THEN
               DISPLAY 'NM_4B = ZERO'
             ELSE
               DISPLAY 'NM_4B NOT = ZERO'
           END-IF.
      *
      *    符号つき数字3桁(パックデシマル)2バイト
           IF NM_3C3 = ZERO
             THEN
               DISPLAY 'NM_3C3 = ZERO'
             ELSE
               DISPLAY 'NM_3C3 NOT = ZERO'
           END-IF.
      *
      * -- hogeeeeeee --
           IF LOW-VALUE = ZERO
             THEN
               DISPLAY 'LOW-VALUE = ZERO'
             ELSE
               DISPLAY 'LOW-VALUE NOT = ZERO'
           END-IF.
           IF LOW-VALUE = SPACE
             THEN
               DISPLAY 'LOW-VALUE = SPACE'
             ELSE
               DISPLAY 'LOW-VALUE NOT = SPACE'
           END-IF.
      *
           STOP RUN.
         MAIN-E.

実行結果

STR = LOW-VALUE
NM = LOW-VALUE
NM_S4 NOT = LOW-VALUE
NM_4B = LOW-VALUE
NM_3C3 = LOW-VALUE
STR = SPACE
NM = SPACE
NM_S4 NOT = SPACE
NM_4B = SPACE
NM_3C3 = SPACE
STR = ZERO
NM = ZERO
NM_S4 = ZERO
NM_4B NOT = ZERO
NM_3C3 NOT = ZERO
LOW-VALUE NOT = ZERO
LOW-VALUE NOT = SPACE

本当はヘキサでいろいろDISPLAYしたかったのですが、調べても無理ぽでした。オープンコボルだと厳しいのかな。。

See you.