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クラスと正規表現については回を改めて解説するとしよう。End of Article

関連記事(Insider.NET内)
文字列処理に関するヒント
 
 

 INDEX
  C#プログラミングTips
     C#からVisual Basicの関数を使う(1)
   C#からVisual Basicの関数を使う(2)
 
「C#プログラミングTips」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間