$ZSUBstr()

バイトのシーケンスから適切にエンコードされた文字列を返します。

$ZSUB[STR] (expr ,intexpr1 [,intexpr2])

$ZSUBSTR()の例

例:

GTM>write $ZCHSET
M
GTM>set char1="a" ; one byte character
GTM>set char2="ç"; two-byte character
GTM>set char3=""; three-byte character
GTM>set y=char1_char2_char3
GTM>write $zsubstr(y,1,3)=$zsubstr(y,1,5)
0

文字セット M を指定すると、式 $ZSUBSTR(y,1,3)=$ZSUBSTR(y,1,5) は、0または "false" と評価します、それは、式 $ZSUBSTR(y,1,5) が、$ZSUBSTR(y,1,3) よりも多くの文字を返すためです 。

例:

GTM>write $zchset
UTF-8
GTM>set char1="a" ; one byte character
GTM>set char2="ç"; two-byte character
GTM>set char3=""; three-byte character
GTM>set y=char1_char2_char3
GTM>write $zsubstr(y,1,3)=$zsubstr(y,1,5)
1

UTF-8モードで開始されたプロセスの場合、$ZSUBSTR(y,1,3)=$ZSUBSTR(y,1,5) の式は 1 または "true" になります、それは、$ZSUBSTR(y,1,5) 式 は、3バイトのchar3を除くchar1とchar2で構成される文字列を返すためで、指定されたバイト長に完全に含まれていなかったためです。

多くの点で、$ZSUBSTR() 関数は$ZEXTRACT() 関数に似ています。たとえば、$ZSUBSTR(expr,intexpr1) は $ZEXTRACT(expr,intexpr1,$L(expr))に相当します。これは、M 文字セットを使用する場合、$ZSUBSTR() は $EXTRACT() および$ZEXTRACT() と同じように動作することに注意してください。違いは、次のとおりです:

  • $ZSUBSTR() は、$ZEXTRACT() ができるSETコマンドの等号の左側には表示されません。

  • どちらのモードでも、$ZSUBSTR() の3番目の式は、文字ではなく1番目の式内のバイトです。

  • $EXTRACT() は、バイト長に関係なく、文字で動作します。

  • $ZEXTRACT() は、マルチバイト文字の境界にかかわらず、バイトで動作します。

  • $ZSUBSTR() は、UTF-8と非UTF-8データを混在させたバイト文字列から有効なUTF-8エンコード文字を抽出する唯一の方法です。Unicodeの文字を処理し、その結果が指定されたバイト長を超えないようにします。

inserted by FC2 system