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 記事ランキング
		
		
			本日
			月間