UNSTRING ステートメントの例
次の例では、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 が入れられます。 さらに、 図 1 で示されているデータが INV-RCD の中へ読み込まれます。
図 1. UNSTRING ステートメントの例 - 入力データ

UNSTRING ステートメントの実行時には、次の処理が行われます。
- INV-RCD の桁 3 ~ 18 (FOUR-PENNY-NAILS) が ITEM-NAME に入れられ、その区域の中で左寄せされます。 未使用の文字位置はスペースで埋められます。 値 16 が CTR-1 に入れられます。
- 分離文字として ALL SPACES が指定されているので、 5 つの連続した SPACE 文字も 1 つの分離文字と見なされます。
- 桁 24 ~ 29 (707890) が INV-NO に入れられます。分離文字 / が DLTR-1 に入れられ、 値 6 が CTR-2 に入れられます。
- 桁 31 ~ 33 が INV-CLASS に入れられます。 分離文字は SPACE ですが、分離文字用の受け入れ域として定義されたフィールドがないため、SPACE はバイパスされます。
- 桁 35 ~ 40 (475120) が調べられ、M-UNITS に入れられます。 分離文字は SPACE ですが、分離文字用の受け入れ域として定義された受け入れフィールドがないため、SPACE はバイパスされます。 値 6 が CTR-3 に入れられます。
- 桁 42 ~ 46 (00122) が FIELD-A に入れられ、その区域の中で右寄せされます。 高位の桁位置は 0 (ゼロ) で埋められます。分離文字は SPACE ですが、 分離文字用の受け入れ域として定義されたフィールドがないため、SPACE はバイパスされます。
- 桁 48 ~ 53 (000379) が DISPLAY-DOLS に入れられます。分離文字ピリオドが DLTR-2 に入れられ、値 6 が CTR-4 に入れられます。
- すべての受け入れフィールドが影響され、INV-RCD 内のデータの 2 文字が調査されていないため、ON OVERFLOW 出口が使用され、UNSTRING ステートメントの実行が完了します。
UNSTRING ステートメントの実行終了時、DISPLAY-REC には次のデータが含まれます。
707890 FOUR-PENNY-NAILS 000379
WORK-REC には次のデータが含まれます。
475120000122BBA
CHAR-CT (ポインター・フィールド) には値 55 が入り、FLD-FILLED (フィールド・カウント・フィールド) には値 6 が入ります。
注: 一連の MOVE ステートメントの代わりに、1 つの UNSTRING ステートメントを書くことができます。