可変長の文字形式、図形形式、および UCS-2 形式に関する規則

可変長フィールドを定義する場合、次の規則が適用されます。
  • 宣言するフィールド長は、1 バイト文字であれば 1 から 16773100 文字まで、2 バイト図形文字または UCS-2 文字であれば 1 から 8386550 文字までになります。
  • 現在の長さは、0 からフィールドについて宣言した最大長までの任意の値を 定義することができます。
  • フィールドはキーワード INZ を使用して初期化することができます。 初期値は指定した値になり、フィールドの初期長は、初期値の長さになります。 フィールドは初期化時にブランクで埋め込まれますが、 ブランクは長さに含まれません。
  • 長さ接頭部のサイズが異なる可変長フィールドは、参照パラメーターとして渡される場合を除き、完全互換です。
  • 変更の始まりプロトタイプ・パラメーターが可変長 として (VARYING、VARCHAR、VARGRAPH、または VARUCS2 キーワードを使用して) 定義されていて、 CONST キーワードも VALUE キーワードも指定されていない場合、渡されるパラメーターの長さ接頭部は、 プロトタイプ・パラメーターと同じサイズでなければなりません。この規則は、OPTIONS(*VARSIZE) が指定されている場合でも適用されます。変更の終わり
  • 位取り表記法を使用して定義されたサブフィールドを除くすべての場合において、フィールドの最大長 (文字単位) が長さ (LEN キーワード、または定義仕様書の 33 から 39 桁目の長さ記入項目によって指定) に含まれます。 ただし、この最大長には、2 バイトまたは 4 バイトの長さ接頭部は含まれません。
  • 位取り表記法を使用して定義されたサブフィールドの場合、開始位置と終了位置を指定して定義されたサイズは、2 バイトまたは 4 バイトの長さ接頭部を含みます。 したがって、位取り表記法を使用して指定されたバイト数は、データを保持するために必要なバイト数よりも、2 バイトまたは 4 バイト長くなります。 VARYING(2) を指定した場合、データに必要なバイト数に 2 バイトを加算し、VARYING(4) を指定した場合には 4 バイトを加算します。 パラメーターなしで VARYING を指定した場合には、長さが 65535 以下であれば 2 バイトを加算し、長さが 65535 を超えていれば 4 バイトを加算します。 英数字のサブフィールドでは、サイズが 3 から 65537 であれば、長さが 1 から 65535 であることを表し、 UCS-2 および図形のサブフィールドでは、サイズが 5 から 131072 であれば、長さが 1 から 65535 であることを表します。
    注: 変更の始まりもっと簡単に可変長 サブフィールドを指定する方法は、長さ表記を使用し、さらに、自由形式定義で POS キーワードを使用するか、または固定形式定義 で OVERLAY キーワードを指定することによって、データ構造内でのサブフィールドの位置を 指定することです。変更の終わり
  • キーワード VARYING はデータ構造に指定することはできません。
  • 可変長の実行時前配列の場合、ファイル内の初期化データは、長さ接頭部を組み込まれて可変長形式で保管されます。
  • 実行時前配列データはファイルから読み取られ、ファイルの最大レコード長は 32766 なので、可変長の実行時前配列の最大サイズは 32764 個の 1 バイト文字、または 16382 個の 2 バイト図形文字または UCS-2 文字になります。
  • 可変長の配列またはテーブルは、コンパイル時データによって定義する ことができます。データのフィールド内の後書きブランクは意味がありません。データの長さは、 フィールド内のブランクでない最後の文字の位置になります。 コンパイル時データには長さ接頭部が保管されないので、 これは実行時前初期化とは異なります。
  • *LIKE DEFINE は可変長フィールドのようなフィールドを定義するためには使用できません。

以下に示すのは、可変長文字フィールドの定義例です。

変更の始まり
図 1. 可変長文字および UCS-2 フィールドの定義
*.. 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+... *
DName+++++++++++ETDsFrom+++To/L+++IDc.Functions++++++++++++++++++++++++++++
 * Standalone fields:
D var5            S              5A   VARYING
D var10           S             10A   VARYING INZ('0123456789')
D largefld_a      S          32767A   VARYING
D max_len_a       S               A   VARYING LEN(16773100)
      DCL-S free_form_10A VARCHAR(10);
 * Prerun-time array:
D arr1            S            100A   VARYING FROMFILE(dataf)
 * Data structure subfields:
D ds1             DS
 *   Subfield defined with length notation:
D   sf1_5                        5A   VARYING
D   sf2_10                      10A   VARYING INZ('0123456789')
 *   Subfield defined using positional notation: A(5)VAR
D   sf4_5               101    107A   VARYING
 *   Subfields showing internal representation of varying:
D   sf7_25                     100A   VARYING
D   sf7_len                      5I 0 OVERLAY(sf7_25:1)
D   sf7_data                   100A   OVERLAY(sf7_25:3)
 *   Free-form varying subfields:
    sf8_10 VARCHAR(10);
    sf9_13 VARCHAR(13 : 4);
 * Procedure prototype
D Replace         PR         32765A   VARYING
D   String                   32765A   CONST VARYING OPTIONS(*VARSIZE)
D   FromStr                  32765A   CONST VARYING OPTIONS(*VARSIZE)
D   ToStr                    32765A   CONST VARYING OPTIONS(*VARSIZE)
D   StartPos                     5U 0 VALUE
D   Replaced                     5U 0 OPTIONS(*OMIT)
変更の終わり
以下に示すのは、可変長図形フィールドおよび UCS-2 フィールドの定義例です。 変更の始まり
図 2. 可変長図形フィールドおよび UCS-2 フィールドの定義
* .. 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+...
DName+++++++++++ETDsFrom+++To/L+++IDc.Functions++++++++++++++++
 *-------------------------------------------------------------
 * Graphic fields
 *-------------------------------------------------------------
 * Standalone fields:
D GRA20           S             20G   VARYING
D MAX_LEN_G       S        8386550G   VARYING
      DCL-S free_form_10G VARGRAPH(10);
 * Prerun-time array:
D ARR1            S            100G   VARYING FROMFILE(DATAF)
 * Data structure subfields:
D DS1             DS
 *   Subfield defined with length notation:
D   SF3_20                      20G   VARYING
 *   Subfield defined using positional notation: G(10)VAR
D   SF6_10               11     32G   VARYING
 *-------------------------------------------------------------
 *   UCS-2 fields
 *-------------------------------------------------------------
D MAX_LEN_C       S        8386550C  VARYING
      DCL-S free_form_10C VARUCS2(10);
D FLD1            S              5C   INZ(%UCS2('ABCDE')) VARYING
D FLD2            S              2C   INZ(U'01230123') VARYING
D FLD3            S              2C   INZ(*HIVAL) VARYING
D DS_C            DS
D   SF3_20_C                    20C   VARYING
 *   Subfield defined using positional notation: C(10)VAR
D   SF_110_C             11     32C   VARYING
変更の終わり