English help on website



byteindex_to_charindex( s1, n1 ) 関数(Ver9.35対応版)
目次関数(文字列操作)− byteindex_to_charindex( s1, n1 ) 関数
byteindex_to_charindex関数は、バイト位置から文字位置の変換をして、変換された位置を取得します。(V8.00以降)

パラメータ1(文字列型)
対象となる文字列を指定します。

パラメータ2(数値型)
バイト位置を指定します。

返り値(数値型)
0から数えた文字位置(column相当)を返します。


strlen等の文字の数え方は、全角を2つ、半角を1つとして数えます。Unicode文字でも全角を2つ、半角を1つとして数えます。
HmJre.dllをloaddllして呼ぶ関数のFindRegular関数等は、全角2バイト、半角1バイト、Unicode文字を4バイトとして扱います。

この数え方の違いを変換して、strlen等の数え方と一致させるためにこの関数があります。
文字の先頭を 0 として、いくつ目かで計算します。

以下の例で、最初の文字がUnicodeの全角文字だとしたら、2を返します。
//#a = byteindex_to_charindex( "☀abcde", 4 );
#a = byteindex_to_charindex( "\u2600abcde", 4 );
message str(#a);
最初の文字がUnicodeの半角文字だとしたら、1を返します。
//#a = byteindex_to_charindex( "Àabcde", 4 );
#a = byteindex_to_charindex( "\u00c0abcde", 4 );
message str(#a);
以下の例では、byteindex_to_charindexを呼ぶことによって、strstrの結果と同じ位置を得られることになります。
loaddll "HmJre.dll";
$target = "\u2600abcde"; //"☀abcde"

#a = dllfunc( "FindRegular", "abc", $target, 0 );
#a = byteindex_to_charindex( $target, #a );

#b = strstr( $target, "abc" );
HmJre.dll V3.13 以降では、dll内のdllfuncで呼び出せる関数としてSetUnicodeIndexAutoConvertという関数が追加されました。
これを使うと、byteindex_to_charindex, charindex_to_byteindexを使わずに自動的に変換することもできます。
詳細はHmJre.dllのヘルプを参照してください。

参照:
column
charindex_to_byteindex