2025/03/05

@Left, @Right, @LeftBack, @RightBack の違い

今回は文字列操作の中でもっとも使うといっても過言ではない @Left、@Right をまとめます。また、混乱してついついヘルプを見てしまう @LeftBack、@RightBack も併記して整理したいと思います。


基本的な構文

どの関数も同じ構文なので @Left を例に確認します。

@Left(stringToSearch; subString)

@Left(stringToSearch; numberOfChars)

これら関数の構文には 2 種類あり、2 つ目の引数が数値の場合と文字列の場合があります。引数の役割は次の通りで、どちらも省略することはできません。

1 stringToSearch 文字列
文字列リスト
検索され取得元となる文字列
2 subString 文字列 検索文字列
numberOfChars 数値 文字数

戻り値は、取得元となる文字列から抽出した部分文字列となります。


引数が文字列の場合

まずは、第 2 引数が検索文字列を指定するパターンです。

検索される文字列は "ABCXYZABC" で固定し、@関数と検索文字列 Chr を変化させながら検証します(例は @Left の場合)。

@Left("ABCXYZABC"; Chr)

検索文字列は、ヒットする文字以外に、イレギュラーパターンとして null と含まれない文字の場合を試しました。

Chr @Left @Right @LeftBack @RightBack
(null) (null) (null) (null) (null)
A (null) BCXYZABCABCXYZ BC
C AB XYZABC ABCXYZAB (null)
X
ABC YZABC ABC YZABC
0 (null) (null) (null) (null)

まずは、ヒットする C の場合です。@Left では左から検索し、ヒットした文字の左側である AB を返しています。@LeftBack では右側から検索するので、いきなりヒットすることになり、その左側を返しています。この構文では検索する方向が重要だといえますね。

イレギュラーパターンの場合は、すべて null となるので、わかりやすい結果となっています。

この動作を表にまとめると以下の通りとなります。


検索方法 取得する文字列
@Left 左 → 右 左側
@Right 右 → 左 右側
@LeftBack 右 → 左 左側
@RightBack 左 → 右 右側

@Left では、左から検索し、ヒットしたらその左側を返します。@Right の場合は右から検索し、右側を取得します。Left なら左、Right なら右でそろっているのでわかりやすいですね。

Back がつくと検索方向が逆になるだけで、取得する文字列の方向は変わりません。


引数が数値の場合

続いては、第 2 引数が文字数を指定するパターンです。文字列 "ABC" に対して、@関数と文字数 n を変えながら結果を確認します(例は @Left の場合)。

@Left("ABC"; n)

テストですので、イレギュラーな値についても検証しています。

n @Left @Right @LeftBack @RightBack
-1 ABC ABC (null) (null)
0 (null) (null)ABC ABC
1 A C AB BC
2
AB BC A C
3 ABC ABC (null) (null)
4 ABC ABC (null) (null)

まずは、妥当な文字数といえる n = 0 ~ 3 を例に挙動を確認します。

Back のついていない関数では指定した文字数を取得しています。@Left なら左、@Right なら右から、指定した文字数を取得するので、わかりやすい結果です。

Back がついている関数では、元の文字数 - n の文字数となっています。例えば、@LeftBack の場合、逆方向(Left の場合は右)から n 文字分を省いた文字列が返されます。

この動作を表にまとめると以下の通りとなります。


取得する文字列 取得方法
@Left 左側 左 から 文字数分を 取得
@Right 右側 右 から 取得
@LeftBack 左側 右 から 省く
@RightBack 右側 左 から 省く

関数名に Back がつく場合、逆方向から指定した文字数を ”省く” 動作となります。引数に指定した数値は "省く文字数" となり "取得する文字数ではない" ことが混乱のもとかもしれませんね。

n = -1 の場合は n = 0 と同じになるかと想定したのですが、予想外の結果でした。このような値をわざと指定する人はいないと思いますが、注意が必要かもしれません。


まとめ

今回は @Left、@Right、@LeftBack、@RightBack 関数の違いについてまとめました。引数のデータ型と機能の違いを覚えておきましょう。


0 件のコメント:

コメントを投稿