ILE COBOL 解説書

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 が入れられます。 さらに、 図 26 で示されているデータが INV-RCD の中へ読み込まれます。

図 26. UNSTRING ステートメントの例 - 入力データ

REQTEXT

UNSTRING ステートメントの実行時には、次の処理が行われます。

  1. INV-RCD の桁 3 〜 18 (FOUR-PENNY-NAILS) が ITEM-NAME に入れられ、その区域の中で左寄せされます。 未使用の文字位置はスペースで埋められます。 値 16 が CTR-1 に入れられます。
  2. 分離文字として ALL SPACES が指定されているので、 5 つの連続した SPACE 文字も 1 つの分離文字と見なされます。
  3. 桁 24 〜 29 (707890) が INV-NO に入れられます。分離文字 / が DLTR-1 に入れられ、 値 6 が CTR-2 に入れられます。
  4. 桁 31 〜 33 が INV-CLASS に入れられます。 分離文字は SPACE ですが、分離文字用の受け入れ域として定義されたフィールドがないため、SPACE はバイパスされます。
  5. 桁 35 〜 40 (475120) が調べられ、M-UNITS に入れられます。 分離文字は SPACE ですが、分離文字用の受け入れ域として定義された受け入れフィールドがないため、SPACE はバイパスされます。 値 6 が CTR-3 に入れられます。
  6. 桁 42 〜 46 (00122) が FIELD-A に入れられ、その区域の中で右寄せされます。 高位の桁位置は 0 (ゼロ) で埋められます。分離文字は SPACE ですが、 分離文字用の受け入れ域として定義されたフィールドがないため、SPACE はバイパスされます。
  7. 桁 48 〜 53 (000379) が DISPLAY-DOLS に入れられます。分離文字ピリオドが DLTR-2 に入れられ、値 6 が CTR-4 に入れられます。
  8. すべての受け入れフィールドが影響され、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 ステートメントを書くことができます。


[ ページのトップ | 前ページ | 次ページ | 目次 | 索引 ]