C#でVisual BasicのLike文を使う方法2選

C#のプログラミングを続けていれば、正規表現を使うことにも慣れてきます。

しかし、ExcelのVBAやVisual Basic(以下VB)のLike文しか使ったことのない人に、マッチングパターンを使うソフトウェアを提供するような場合、正規表現を覚えてもらうことは、ハードルが高いです。

そこで、C#でVisual Basicを使う方法を調べてみました。

Microsoft.VisualBasic.CompilerServices.LikeOperatorを使う方法

先ずは、C#のコンソールアプリを作って、以下のコードを入力してみてください。

using Microsoft.VisualBasic;
using Microsoft.VisualBasic.CompilerServices;

var result1 = LikeOperator.LikeString("abcdefg", "*bc?e*", CompareMethod.Binary);
Console.WriteLine($"{result1}");

var result2= LikeOperator.LikeString("abcdefg", "*BC*",CompareMethod.Binary);
Console.WriteLine($"{result2}");

このコードは、Microsoft.VisualBasic.CompilerServices.LikeOperatorクラスのLikeStringメソッドを2回呼び出しています。
LikeOperatorの前に長々と名前空間名を付けたくないので、あらかじめ、

using Microsoft.VisualBasic.CompilerServices;

と宣言しています。
VBで「A Like B」という文は、「LikeString(A, B, CompareMethod.Binary)」になります。
CompareMethod.Binaryはおまじないで、大文字小文字を区別してテキスト比較をするという意味です。本来の表現は、Microsoft.VisualBasic.CompareMethod.Binaryとなりますが、こちらも長々と書きたくないので、あらかじめ、

using Microsoft.VisualBasic;

と宣言しています。
このコードを「Ctrl + F5」で実行させると、大文字小文字を区別するので、

となり、正常動作が確認できます。
なお、CompareMethod.Textを使えば、大文字と小文字を区別せずに比較するので、どちらもTrueとなります。

ところで、Microsoftのこちらのページによれば、「This helper method is not meant to be called directly from your code.」と書いてあります。つまり、あなたのコードから直接呼び出すことを意図していないということです。

そう書かれていても・・・使いたいですよね。

Visual Basicのプロジェクトを呼ぶ方法

Microsoftさんに注意されない方法として、Visual Basicのプロジェクトを呼ぶ方法が考えられます。

C#のコンソールアプリ等の開発環境から、「ファイル⇒追加⇒新しいプロジェクト」を選びます。

右上の条件のところを「Visual Basic」「Windows」「ライブラリ」としてから、図のように「クラスライブラリ」を選択して、「次へ」をクリックします。
プロジェクトの名前は「VB」とでもしてください。

更に、デフォルトで用意される「Class1.vb」を「NET.vb」とでも変更します。
NET.vbのエディタに入力するコードは次の通りです。

Public Class NET
    Public Shared Function VBLike(ByVal input As String, ByVal pattern As String) As Boolean
        Return input Like pattern
    End Function
End Class

文字列の「input」と「pattern」を引数とし、Like文でパターンマッチングした論理値を戻り値とする関数です。

実際の画面は次のようになると思います。

次に、C#からVBを呼び出すための仕掛けをします。
このために、C#のプロジェクトファイル名(ここではUsingVBLikeStatement)の左側の▷をクリックして展開します。出てきた「依存関係」を右クリックしてプロジェクト参照の追加をクリックし、VBのチェックボックスをチェックしてからOKで閉じます。

C#のエディタに入力するテストコードは次の通りです。

Console.WriteLine(VB.NET.VBLike("abcde", "?bc*"));
Console.WriteLine(VB.NET.VBLike("abcde", "?BC*"));

実際の画面は次のようになると思います。

このコードを「Ctrl + F5」で実行させると、大文字小文字を区別するので、

という結果が得られます。

まとめ

VBの関数として、Likeだけが欲しいのであれば、こっそりと、LikeOperator.LikeStringを使うのが手軽です。Like以外の関数も欲しければ、VBのプロジェクトを作る方法が良いと思います。

コメント

タイトルとURLをコピーしました