変数(数値)に入れた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.