PARAG - テキストを行に分割

PARAG 関数は、区切り文字を使用して文字列を複数のサブ文字列に分割します。文字列の先頭から特定のバイト数をスキャンし、グループ内の末尾のブランクを区切り文字で置換することにより、最初のサブ文字列を作成します。このサブ文字列はトークンとも呼ばれます。その後、区切り文字から開始して、行の次の文字列グループをスキャンし、このグループ末尾のブランクを 2 つ目の区切り文字と置換することにより、2 つ目のトークンを作成します。行の末尾に到達するまで、この処理を繰り返します。

区切り文字で各トークンに分割した後、GETTOK 関数を使用して、これらのトークンをそれぞれ異なるフィールドに配置することができます。PARAG 関数は、スキャンしたグループ内にブランクが見つからない場合、グループの先頭文字を区切り文字で置換します。したがって、文字グループには少なくとも 1 つのブランクが含まれている必要があります。スキャンされた文字数は、最大トークンサイズとして指定されます。

たとえば、「subtitle」というフィールドにブランクで区切られた長いテキストが存在する場合、最大トークンサイズを指定することにより、このフィールドをほぼ均等な長さのサブ文字列に分割することができます。このフィールドのサイズが 350 バイトの場合、最大トークンサイズとして 120 バイトを指定することにより、3 つのサブ文字列に分割することができます。この手法を使用すると、テキスト行を段落形式で表示することが可能です。

ヒント:行を等しいサイズに分割する場合、意図する数よりも多くの行が作成される可能性があります。たとえば、120 バイトのテキスト行を最大 60 バイトの 2 行に分割しようとして、1 つ目の行が 50 バイト、2 つ目の行が 55 バイトに分割されたことを想定します。分割後の 3 つ目の行は 15 バイトになります。これを修正するには、3 つ目の行の先頭にブランクを挿入 (弱連結を使用) し、この行を 2 つ目の行末に追加 (強連結を使用) します。この行は、60 バイトよりも長くなります。

テキストを行に分割

PARAG(length, source_string, 'delimiter', max_token_size, output)

説明

length

整数

source_string および output の長さをバイト数で指定します。長さが定義されたフィールドを指定することもできます。

source_string

文字

トークンに分割する文字列です。文字列は一重引用符 (') で囲みます。文字列を含むフィールドまたは変数を指定することもできます。

delimiter

文字

一重引用符 (') で囲まれた区切り文字です。テキストで使用されていない文字を選択します。

max_token_size

整数

各トークンのサイズの上限値です。

output

文字

結果を格納するフィールド名、または出力フォーマットです。フォーマットは一重引用符 (') で囲みます。

テキストを行に分割

PARAG 関数は、カンマ (,) を区切り文字として使用し、ADDRESS_LN2 を 10 バイト以下の行に分割します。その結果を PARA_ADDR に格納します。

TABLE FILE EMPLOYEE
PRINT ADDRESS_LN2 AND COMPUTE
PARA_ADDR/A20 = PARAG(20, ADDRESS_LN2, ',', 10, PARA_ADDR);
BY LAST_NAME
WHERE TYPE EQ 'HSM';
END

出力結果は次のとおりです。

LAST_NAME        ADDRESS_LN2           PARA_ADDR
---------        -----------           ---------
BANNING          APT 4C                APT 4C    ,
CROSS            147-15 NORTHERN BLD   147-15,NORTHERN,BLD
GREENSPAN        13 LINDEN AVE.        13 LINDEN,AVE.
IRVING           123 E 32 ST.          123 E 32,ST.       ,
JONES            235 MURRAY HIL PKWY   235 MURRAY,HIL PKWY
MCKNIGHT         117 HARRISON AVE.     117,HARRISON,AVE.
ROMANS           271 PRESIDENT ST.     271,PRESIDENT,ST.
SMITH            136 E 161 ST.         136 E 161,ST.