当ブログに掲載しているサンプルは、すべて利用者の自己責任という形でお願いします。
ただし、明らかな不具合がある場合、ご連絡いただければ、訂正記事を出します。
また、こちらのサンプルは、別のサイト等への公開、転載は一切禁止しています。
どうしてもと言う場合は、筆者にあらかじめご連絡ください。

テクてく Lotus 技術者 Slack に参加しよう!

2009年4月28日火曜日

Like演算子使用時の注意

今回は備忘録です。

どのような文字が入力されたのかをチェックするのには色々な方法があるかと思います。
その中の一つ、Like演算子に関してです。

こんなサンプルを作ってみました。
%include "lsconst.lss"
Sub Click(Source As Button)
    Dim idata As String
    
    idata = Inputbox( "何か文字列を「1文字」だけ入力してください。", "Like関数のテスト" )
    If idata Like "[A-Z]" Then
        Msgbox "貴方が入力した文字:" & idata, MB_OK + MB_ICONINFORMATION, "A~Zを入力しましたね"
    End If
End Sub

これを実行してみます。

すると、どうでしょう。
なぜか、aやbでもメッセージが表示されます。
しかし、zではメッセージが表示されません。
どうも、A、B、C・・・Z、a、b、c・・・yまでが、Like演算子の[A-Z]という範囲のようです。

おかしいですね。
さらに、If idata Like "[A-B]" Then
とすると、A、B、aの3文字だけが反応します。

ここで、デザイナーヘルプを良く読んでみると、「リストのソート順はOption Compareの設定によって決まります」とあります。
そこで、Option Compareのヘルプを読んでみて、Option Compare Binaryという一文を追加しました。

そうしたところ、上記のサンプルは思惑通り、A、B、C・・・Zの文字だけが反応するようになりました。


Like演算子を利用する場合は注意しましょう。


*1 ちなみに、Option Compare Binaryでも、Option Compare Caseでも、英数字のソート順は国際ANSIと同じになります。と書いてありますが、そうはならないようです。なんでだろ?

*2 今回のサンプルは、R4.6.6、R5.0.8、7.0.3、8.5で試しましたが、結果は一緒でした。

0 件のコメント: