今回は文字列操作の中でもっとも使うといっても過言ではない @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) | BCXYZABC | ABCXYZ | 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 件のコメント:
コメントを投稿