charindex_to_byteindex( s1, n1 ) 関数(Ver9.35対応版)
目次−
関数(文字列操作)−
charindex_to_byteindex( s1, n1 ) 関数
charindex_to_byteindex関数は、
文字位置からバイト位置の変換をして、変換された位置を取得します。(V8.00以降)
- パラメータ1(文字列型)
-
対象となる文字列を指定します。
- パラメータ2(数値型)
-
0から数えた文字位置(column相当)を指定します。
- 返り値(数値型)
-
バイト位置を返します。
strlen等の文字の数え方は、全角を2つ、半角を1つとして数えます。Unicode文字でも全角を2つ、半角を1つとして数えます。
HmJre.dllをloaddllして呼ぶ関数のFindRegular関数等は、全角2バイト、半角1バイト、Unicode文字を4バイトとして扱います。
この数え方の違いを変換して、strlen等の数え方と一致させるためにこの関数があります。
文字の先頭を 0 として、いくつ目かで計算します。
以下の例で、最初の文字がUnicodeの全角文字だとしたら、4を返します。
例 |
//#a=charindex_to_byteindex( "☀abcde", 2 );
#a=charindex_to_byteindex( "\u2600abcde", 2 );
message str(#a);
|
最初の文字がUnicodeの半角文字だとしたら、5を返します。
例 |
//#a=charindex_to_byteindex( "Àabcde", 2 );
#a=charindex_to_byteindex( "\u00c0abcde", 2 );
message str(#a);
|
以下の例で、文字列変数中にUnicode文字が含まれるかどうかを調べることに使うこともできます。
例 |
$target = "□abcde";
#c = strlen( $target );
if( charindex_to_byteindex( $target, #c ) != #c ) {
//Unicode文字が含まれる
} else {
//Unicode文字が含まれない
}
|
HmJre.dll V3.13 以降では、dll内のdllfuncで呼び出せる関数としてSetUnicodeIndexAutoConvertという関数が追加されました。
これを使うと、byteindex_to_charindex, charindex_to_byteindexを使わずに自動的に変換することもできます。
詳細はHmJre.dllのヘルプを参照してください。
参照:
column
byteindex_to_charindex