#本記事の目的
VBSの中で「配列Aの中から、文字列Bに一致する配列の値を抜き出す」ための関数としてFilter関数があります。こちらを業務で実装する時に気づいた仕様上の注意点について、ナリッジメモとして残したいと思います。初めて本関数を使用する方などの、実装時の補助線となれば幸いです。
#Filter関数について
基本形式は下記のようになります。
抽出モード(抽出結果をTrue or Falseで返す)と、文字列比較のモード(バイナリモード(0) or テキストモード(1))については省略可能です。
Filter(配列A, 文字列B,(抽出モード),(文字列比較のモード))
#注意点
この関数で、文字列Bと一致するかの処理を行う際、値同士は**「完全一致」ではなく「部分一致」**で比較されます。例を挙げると、「9」に一致する値を抜き出す時、範囲が「1~10」の時と「1~20」の時では、下記のような違いがでます(「テストコード」→「実行結果」の順に記載します)。
####テストコード
dim moji
dim array
dim extraction
dim index
dim result
' 実際に処理する際は、どちらかのmojiをコメントアウト
' 1~10の時
moji = "1,2,3,4,5,6,7,8,9,10"
' 1~20の時
moji = "1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20"
array = Split(moji, ",")
extraction = Filter(array,9)
For index = 0 To UBound(extraction)
result = extraction(index)
response.write "抜き出し結果:" & result & "<br>"
Next
response.end
####実行結果
1~10の時
抜き出し結果:9
1~20の時
抜き出し結果:9
抜き出し結果:19
上記のような結果となるため、Filter関数の使用は**「指定する文字列が、部分的に一致すればOKな時に限られる/完全一致させたい時はNG」**という点に注意して頂ければと思います。
#補足
もし完全一致での比較を行いたい場合、StrComp関数で文字列同士の比較を行い、その戻り値を使用する等の方法があります。こちらのサイトに分かりやすい使用方法が記載されていますので、ご参照下さい。