次の例では、UNSTRING ステートメントに適用されるいくつかの考慮事項を示します。
データ部では、UNSTRING ステートメントの影響を受ける以下の入力レコードが定義されているものとします。
01 INV-RCD. 05 CONTROL-CHARS PIC XX. 05 ITEM-INDENT PIC X(20). 05 FILLER PIC X. 05 INV-CODE PIC X(10). 05 FILLER PIC X. 05 NO-UNITS PIC 9(6). 05 FILLER PIC X. 05 PRICE-PER-M PIC 99999. 05 FILLER PIC X. 05 RTL-AMT PIC 9(6).99.
次の 2 つのレコードが UNSTRING ステートメントの受け入れフィールドとして定義されています。 DISPLAY-REC は印刷出力用に使用されます。 WORK-REC は内部処理用に使用されます。
01 DISPLAY-REC 05 INV-NO PIC X(6). 05 FILLER PIC X VALUE SPACE 05 ITEM-NAME PIC X(20). 05 FILLER PIC X VALUE SPACE 05 DISPLAY-DOLS PIC 9(6). 01 WORK-REC 05 M-UNITS PIC 9(6). 05 FIELD-A PIC 9(6). 05 WK-PRICE REDEFINES FIELD-A PIC 9999V99. 05 INV-CLASS PIC X(3).
UNSTRING ステートメントの中で制御フィールドとして使用するために、次のフィールドも定義されています。
01 DBY-1 PIC X, VALUE IS ".". 01 CTR-1 PIC 99, VALUE IS ZERO. 01 CTR-2 PIC 99, VALUE IS ZERO. 01 CTR-3 PIC 99, VALUE IS ZERO. 01 CTR-4 PIC 99, VALUE IS ZERO. 01 DLTR-1 PIC X. 01 DLTR-2 PIC X. 01 CHAR-CT PIC 99, VALUE IS 3. 01 FLDS-FILLED PIC 99, VALUE IS ZERO.
手続き部では、INV-RCD のサブフィールドを DISPLAY-REC および WORK-REC のサブフィールドに移動するために、 次の UNSTRING ステートメントが書かれています。
UNSTRING INV-RCD DELIMITED BY ALL SPACES OR "/" OR DBY-1 INTO ITEM-NAME COUNT IN CTR-1, INV-NO DELIMITER IN DLTR-1 COUNT IN CTR-2, INV-CLASS, M-UNITS COUNT IN CTR-3, DISPLAY-DOLS DELIMITER IN DLTR-2 COUNT IN CTR-4 WITH POINTER CHAR-CT TALLYING IN FLDS-FILLED ON OVERFLOW GO TO UNSTRING-COMPLETE.
UNSTRING ステートメントを出す前に、CHAR-CT (ポインター項目) に値 3 を入れます。 これは INV-RCD の始まりにある 2 文字の制御文字を処理の対象としないためです。 DBY-1 には分離文字として使用されるピリオドが入れられ、FLDS-FILLED (フィールド・カウント項目) には値 0 が入れられます。 さらに、 図 26 で示されているデータが INV-RCD の中へ読み込まれます。
図 26. UNSTRING ステートメントの例 - 入力データ
UNSTRING ステートメントの実行時には、次の処理が行われます。
UNSTRING ステートメントの実行終了時、DISPLAY-REC には次のデータが含まれます。
707890 FOUR-PENNY-NAILS 000379
WORK-REC には次のデータが含まれます。
475120000122BBA
CHAR-CT (ポインター・フィールド) には値 55 が入り、FLD-FILLED (フィールド・カウント・フィールド) には値 6 が入ります。