連載

プロフェッショナルVB.NETプログラミング

第21回 コンソール・アプリケーションの開発と活用(前編)

(株)ピーデー
川俣 晶
2002/10/19

Page1 Page2

コマンドライン引数

 GUIアプリケーションなら、プログラムに何かの指定を入力させたいとき、ダイアログ・ボックスを開いて入力を促せばよい。だが、ウィンドウを開くことができないコンソール・アプリケーションでは、どうやってユーザーから情報をもらえばよいのだろうか?

 そのために主に利用される機能がコマンドライン引数である。例えば、pingコマンドで「www.piedey.co.jp」にアクセスするには、コマンドラインから「ping www.piedey.co.jp」+Enterと入力する。するとping.exeというコマンドが実行され、後半のwww.piedey.co.jpは、コマンドライン引数としてping.exeに引き渡される。このようにコマンド・プロンプト上で、コマンド名に続いて空白文字を入れて、プログラムに指定したい文字列を記述することができる。

 では、コマンドライン引数に指定された文字列をプログラムから参照するにはどうすればよいのだろうか?

 実際には、コマンドライン引数そのものは、GUIアプリケーションにも存在しており、それを扱う機能はVB 6にも含まれている。次のようにCommand関数を参照することで、引数を参照することができる。以下はそれを使用した例である。

 1: Private Sub Form_Load()
 2:   MsgBox Command
 3: End Sub
Command関数により引数を参照するVB 6のサンプル・プログラム2

 このソースからEXEファイルを作成して、コマンドラインから呼び出してみよう。

サンプル・プログラム2を引数を指定してコマンド・ラインから実行する

 すると、以下のようなメッセージ・ボックスが表示される。

サンプル・プログラム2を上記の方法で実行した実行結果

 見てのとおり、コマンド名に続いて入力された文字列を、そのままCommand関数で参照できていることが分かると思う。

 さて、VB.NETにはCommand関数が引き継がれている。しかし、それと同時に、Sub Mainの引数でコマンドライン引数を受け取ることもできるようになっている。実際に、それができることを確認するために以下のようなサンプル・プログラムを記述してみた。

  1: Module Module1
  2:
  3:   Sub Main(ByVal CmdArgs() As String)
  4:     Console.WriteLine(Command())
  5:     Dim s As String
  6:     For Each s In CmdArgs
  7:       Console.WriteLine(s)
  8:     Next
  9:   End Sub
 10:
 11: End Module
Command関数とSub Mainの引数の両方でコマンド・ライン引数を受け取るVB.NETのサンプル・プログラム3

 3行目を見て分かるとおり、Sub Mainの引数が増えている。そして、それは文字列の配列という形になっている。つまり、Command関数を使用すると全体を1個の文字列として取得する形になるが、引数では引数の文字列を分割された形で受け取ることができる。

 さて、実際にこれを実行してみよう。

サンプル・プログラム3を、引数を指定して実行した結果

 このとおり、どちらの機能を使っても、コマンドライン引数の値が取得できていることが分かるだろう。しかし、空白を含んだ引数を指定すると、同じ結果にならない。

サンプル・プログラム3を、空白文字を含んだ引数を指定して実行した結果

 Sun Mainの引数でコマンドライン引数を取得する場合、空白文字は引数の区切り文字として機能するので、配列に2つの文字列が入った形で取得される。もし、1つの文字列で取得させたい場合は、引数を「"」記号でくくる。

サンプル・プログラム3を、「"」で囲んだ引数を指定して実行した結果

 Sub Mainの引数の場合、「"」記号はあくまで引数の項目の範囲を明示するための記号として見なされ、配列変数の中には入らない。すべての文字列を忠実に保持するCommand関数とは大きく違っている。この挙動は、複数のファイル名などをコマンドライン引数で受け取るときに便利である。例えば「c:\test.txt」と「c:\hello world.txt」という2つのファイル名をコマンドライン引数で渡すとき、一般的なコマンド・プロンプト上の慣習と同じく、空白文字を含むファイル名は「"」記号でくくって記述するとすれば、この挙動はまさに期待に合致する。実際に試してみると、以下のような結果になる。

サンプル・プログラム3を、複数の引数を指定して実行した結果

 これを見て分かるとおり、Command関数経由で取得すると、ファイル名を取り出すために、後から面倒は文字列操作を行う必要があるが、Sub Mainの引数なら、即座にそのままファイル名として利用できることになる。

次回予告

 今回はコンソール・アプリケーション開発の基礎について述べた。次回後編では、CUIならではのコンソール・アプリケーションの活用方法について、プログラムを作りながら解説する予定だ。End of Article


 INDEX
  連載 プロフェッショナルVB.NETプログラミング
  第21回 コンソール・アプリケーションの開発と活用(前編)
    1.コンソール・アプリケーションとは何か?
  2.コマンドライン引数
 
「プロフェッショナルVB.NETプログラミング」


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 記事ランキング

本日 月間