C#プログラミングTips
C#からVisual Basicの関数を使う(2)
デジタルアドバンテージ
2002/04/19
|
|
入力用のダイアログ・ボックスを表示するInputBox関数
.NET Frameworkのクラス・ライブラリでは、メッセージを表示するためのMessageBoxクラス(名前空間:System.Windows.Forms)は定義されているが、次のような入力機能のあるダイアログ・ボックスを開く機能は持っていない。
|
InputBox関数で表示される入力用のダイアログ・ボックス |
VBのInputBox関数を使えば、次のようにしてこのダイアログ・ボックスを開くことができる。
15: string answer = Interaction.InputBox(
16: "ここに質問を書きます",
17: "ここにタイトルを書きます",
18: "デフォルトの答え",
19: -1, -1);
20: Console.WriteLine(answer);
|
|
入力用のダイアログ・ボックスを表示し、そこで入力された文字を表示する |
InputBox関数の最後の2つのパラメータには、ダイアログ・ボックスを開く座標を指定する。この例のように、両方に“-1”を指定すると、ダイアログ・ボックスはスクリーン中央に表示される。InputBox関数の戻り値はダイアログ・ボックスで入力された文字列となる。ユーザーにちょっとした入力をしてもらいたいときに便利な関数だ。
文字列を変換するStrConv関数
ここまでに挙げた2つの関数はInteractionクラスに属するものだったが、以降はStringsクラスに属する、文字列を扱う関数を紹介する。
まず、StrConv関数は、指定された変換方法で文字列を変換する関数だ。次の例では、文字列を全角文字から半角文字へ、さらに半角文字から全角文字へ変換する方法を示している。
24: string orig = "ABC@#123アイウあいう日本";
25:
26: string narrow
27: = Strings.StrConv(orig, VbStrConv.Narrow, 0x0411);
28: Console.WriteLine(narrow);
29:
30: string wide
31: = Strings.StrConv(narrow, VbStrConv.Wide, 0x0411);
32: Console.WriteLine(wide);
|
|
文字列を半角文字に変換して表示し、さらに全角文字に変換して表示する |
この部分の実行結果は次の画面のようになる。
|
ひらがなと漢字には半角文字がないため、変換されない |
StrConv関数の第2パラメータには、列挙型“VbStrConv”のメンバを指定する。また、第3パラメータには「カルチャ識別子(LCID)」というものを指定する。日本(日本語)のLCIDは「0x0411(10進数では1041)」である(LCIDについての詳細は、リファレンス・マニュアルのCultureInfoクラスを参照していただきたい)。
ほかに、StrConv関数が持つ便利な機能としては、「ひらがな→カタカナ」、「カタカナ→ひらがな」の変換がある。次にこの例を示す。この実行結果は、リスト中にコメントとして埋め込んでいる。
34: string kana = "ひらがなとカタカナを変換";
35: Console.WriteLine(
36: Strings.StrConv(kana, VbStrConv.Katakana, 0x0411));
37: // ヒラガナトカタカナヲ変換
38:
39: Console.WriteLine(
40: Strings.StrConv(kana, VbStrConv.Hiragana, 0x0411));
41: // ひらがなとかたかなを変換
|
|
文字列を「ひらがな→カタカナ」、「カタカナ→ひらがな」で変換し、表示する |
文字を繰り返すStrDup関数
StrDup関数は、指定された文字(文字列が指定された場合は最初の1文字)を、指定された回数だけ繰り返して生成された文字列を返す。
45: for (int i = 1; i < 5; i++) {
46: Console.WriteLine(Strings.StrDup(i, 'が'));
47: }
48: // が
49: // がが
50: // ががが
51: // がががが
|
|
1文字を繰り返して作成された文字列を、文字数を増やしながら表示する |
文字の並びを逆にするStrReverse関数
StrReverse関数は、指定された文字列の文字の並びを逆にする関数だ。用途は限られるかもしれないが、文字列を末尾から処理するような必要がある場合には、あらかじめ並びを逆にしておいて先頭から処理すると、コードがシンプルになるかもしれない。
55: Console.WriteLine(Strings.StrReverse("NIMDA"));
56: // ADMIN
|
|
指定された文字列を逆順に並び替え、表示する |
文字列を分割するSplit関数
最後に紹介するのは、文字列を分割するためのSplit関数だ。クラス・ライブラリにあるStringクラス(名前空間:System)のSplitメソッドによる文字列の分割については、「C#プログラミングTips:文字列処理に関するヒント」で解説しているが、そこにもあるように、このメソッドは文字列を特定の1文字でしか分割できない。これに対して、VBのSplit関数は文字列を文字列で分割することができる。
さらにVBのSplit関数では、文字列の比較について、テキスト・モードとバイナリ・モードの2種類が用意されている。テキスト・モード(第4パラメータにCompareMethod.Textを指定した場合)では、大文字/小文字、全角/半角の区別なしに文字列を分割することができる。一方、バイナリ・モード(第4パラメータにCompareMethod.Binaryを指定した場合)では、区切り文字列(第2パラメータで指定する)と完全に一致した部分でのみ文字列を分割する。次の例ではこれら2つのパターンを示している。
60: string str = "abcdefABCDEFabcdefABCDEF";
61: string sep = "CD";
62: string[] parts;
63:
64: parts = Strings.Split(str, sep, -1, CompareMethod.Text);
65: foreach (string s in parts) {
66: Console.WriteLine(s);
67: }
68: // ab
69: // efAB
70: // EFab
71: // efAB
72: // EF
73:
74: parts = Strings.Split(str, sep, -1, CompareMethod.Binary);
75: foreach (string s in parts) {
76: Console.WriteLine(s);
77: }
78: // abcdefAB
79: // EFabcdefABCDEF
|
|
文字列をテキスト・モードおよびバイナリ・モードで分割し、表示する |
Split関数は分割してできた複数の部分文字列を配列として返す。第3パラメータには、返す部分文字列の数を指定できるが、“-1”を指定した場合には、すべての部分文字列を配列として受け取ることができる。
なお余談ではあるが、クラス・ライブラリのRegexクラス(名前空間:System.Text.RegularExpressions)にあるSplitメソッドでも文字列による文字列の分割が可能で、区切り文字列に正規表現を使用することができる。Regexクラスと正規表現については回を改めて解説するとしよう。
Insider.NET 記事ランキング
本日
月間