PIC
○よく使う
・データ確保
PIC X(10) 英数字(英字、数字(計算できない))、空白 例:ABCDEFGHIJ
PIC XXXXXXXXXX 同上
PIC 9(10) 数字 符号なし(マイナスなし) 例:1234567890
PIC 99999999999 同上
PIC S9(10) 数字 符号あり(マイナスあり) 例:-1234567891
内部構造123456789J
PIC 9(10)V9(3) V 仮装した小数点の位置 小数点以下3桁 例:1234567891.123
内部構造1234567891123
PIC N(10) 日本語(全角)20バイト必要
・表示用
PIC X(10)BBXXX 10文字と空白2個と3文字 例:ABCDEFGHIJ KLM
PIC 9,999,999 数字 コンマ表示 例:0,012,345
PIC Z,ZZZ,ZZZ 数字 コンマ表示 例:12,345
PIC --,---,--- 数字 コンマ表示 マイナスがある時使用 ハイホン分1ケタ多くとる
例:-12,345
PIC \,\\\,\\\ 数字 通貨用 例:\12,345
PIC \,\\\,\\\- 数字 通貨用マイナスあり 例:\12,345-
○あまり使わない
・データ確保
PIC A(10) 英字、空白 例:ABCDEFGHIJ
・表示用
PIC *,***,*** 数字 例:*,*12,345
●編集例
(注) △はスペース
送り項目のPIC | 送り項目の値 | 受け項目のPIC | 編集結果 |
999999 | 001234 | ZZZZZ9 | 1234 |
999999 | 001234 | ZZZ,ZZ9 | 1,234 |
999999 | 000123 | ZZZ,ZZ9 | 123 |
999999 | 000123 | \ZZZ,ZZ9 | \△△△△123 |
999999 | 000000 | ZZZZZ9 | 0 |
999999 | 000000 | ZZZZZZ | |
999999V99 | 00123456 | ZZZZZ9.99 | 1234.56 |
9999V999 | 123456 | ZZZZZ.ZZ | 123.45 |
9999V9 | 1234 | ZZZZZ9.999 | 123.400 |
999V999 | 01234 | \***.*** | \**1.234 |
9(6) | 000123 | *****9 | ***123 |
9(6) | 000123 | \\\\\9 | \123 |
9(6) | 000000 | ****** | ****** |
9(6) | 000000 | \\\\\\ | |
9999V99 | 000000 | \****.** | ****.** |
V9(6) | 123456 | \***,**9.99 | \******0.12 |
S9(6) | 000123- 厳密には00012L | ------9 | -123 |
S9(6) | 000123+ 厳密には00012C | ------9 | 123 |
S9(6) | 000123- 厳密には00012L | ++++++9 | -123 |
S9(6) | 000123+ 厳密には00012C | ++++++9 | +123 |
9(6) | 123456 | -,---,---.-- | 123,456.00 |
9(6) | 123456 | +,+++,+++.++ | +123,456.00 |
99999V9 | 123456 | BBB999.00 | 345.00 |
99999V9 | 123456 | B9B999.99 | 2△345.60 |
S999V999 | 123456- | \,\\\,\\\.99CR | \123.45CR |
999V999 | 123456 | \,\\\,\\\.99CR | \123.45 |
S9(6) | 000123- 厳密には00012L | ZZZZZ9- | 123- |
S9(6) | 000123+ 厳密には00012C | ZZZZZ9- | 123 |
S9(6) | 000123- 厳密には00012L | ZZZZZ9+ | 123- |
S9(6) | 000123+ 厳密には00012C | ZZZZZ9+ | 123+ |
S9(6) | 000123- 厳密には00012L | -ZZZZZ9 | -△△△123 |
S999V999 | 123456- | \ZZ,ZZZ.99DB | \△△△123.45DB |
999V999 | 123456 | \ZZ,ZZZ.99DB | \△△△123.45 |
作業領域の書き方
01 AAA. *集団項目
03 AAA1. *集団項目
05 AAA11 PIC 9(03). *基本項目
05 AAA12 PIC 9(03). *基本項目
77 BBB1 PIC X(03). 独立項目
01 BBB1 PIC X(03). 上と同じ意味 最近はこちらが多い
●レベル番号
01 03 05 07 と奇数を書く(追加できるように)
領域の初期化について
●作業領域で指定
*ZEROで初期化
01 IX.
03 IX1 PIC 9(03) VALUE ZERO.
03 IX2 PIC 9(03) VALUE ZERO.
*SPACEで初期化
01 WKALL.
03 WK1 PIC X(03) VALUE SPACE.
03 WK2 PIC X(03) VALUE SPACE.
*その他いろいろ
01 WKALL.
03 WK1 PIC X(03) VALUE "ABC". *ABCが入る
03 WK2 PIC X(03) VALUE ALL "0". *全て0が入る
●MOVEで転送
MOVE ALL "0" TO WKALL.
MOVE ZERO TO IX1.
MOVE SPACE TO WK1.
MOVE HIGH-VALUE TO WK1. *16進定数(FF)
MOVE LOW-VALUE TO WK2. *16進定数(00)
●INITIALIZEで初期化
項目の属性に従って初期化される。
INITIALIZE WKALL.
01 WKALL.
03 WK1 PIC X(03). *SPACEが入る。
03 WK2 PIC 9(03). *ZEROが入る。
●効率の良い初期化
マシンの能力が低い時は以下の対策を取っていました。
・領域の初期化はMOVE命令を使用する。INITIALIZE命令は使用しない
・ワーク領域はVALUE句で初期化しない。
○頻繁に初期化する時は、ワーク0をMOVEして初期化する。回さない。
例1ではなく、例2を使用する。
例1-------------------------------------
01 AAA.
03 AAA1 OCCURS 50.
05 AAA11 PIC 9(03).
05 AAA12 PIC 9(03).
PERFORM VALYING IX FROM 1 BY 1
UNTIL IX > 50
MOVE 0 TO AAA11(IX)
MOVE 0 TO AAA12(IX)
END-PERFORM.
例2-------------------------------------
01 AAA.
03 AAA1 OCCURS 50.
05 AAA11 PIC 9(03).
05 AAA12 PIC 9(03).
01 ZZZ.
03 FILLER OCCURS 50.
05 ZZZ11 PIC 9(03) VALUE 0.
05 ZZZ12 PIC 9(03) VALUE 0.
MOVE ZZZ TO AAA.
算術計算
ADD A B A+B→B
ADD A TO B 同上
ADD A B C D A+B+C+D→D
ADD A B C TO D 同上
ADD 1 TO A 1+A→A *よく使う
ADD A B C GIVING D A+B+C→D
SUBTRACT A FROM B B-A→B
SUBTRACT A B FROM C GIVING D C-(A+B)→D
MULTIPLY A BY B A×B→B
MULTIPLY A BY B GIVING C A×B→C
DIVIDE A INTO B B÷A→B
DIVIDE A INTO B GIVING C B÷A→C
*昔はスピードが遅かったので、ADDなど使用していたが、今日ではスピードも速いので、
あまり気にせずに、簡単なCOMPUTEの使用が多い
COMPUTE F = A + B . . . A+B→F
COMPUTE F = ((A + B) / (C - D)) * 100 . . ((A+B)÷(C-D)) × 100 →F
COMPUTE F ROUNDED = A + B . . A+B→F 四捨五入
|
|