連載プロフェッショナルVB.NETプログラミング第22回 コンソール・アプリケーションの開発と活用(後編) |
パイプの活用
標準入力と標準出力は、ほかのプログラムにも接続できる。これをパイプという。例えば、2個のコンソール・アプリケーションに対して、1個のプログラムの標準出力の結果を、ファイルなどに出力することなく、もう1個のプログラムの標準入力に入力させることができる。
これを体験するために、簡単なサンプル・プログラムを用意した。これは、標準入力から入力した文字列をすべて大文字に変換してから標準出力に出力するものである。
|
|
標準入力から入力された文字列を大文字に変換して標準出力に出力するサンプル・プログラム2 |
コードについて簡単に説明すると、7行目の判定は、入力がEOFに達したかどうかを調べている。ファイルでなくても、どんなデータにも終わりはあるので、必ず変数sはNothingになるときが来る。キーボードから入力しているときは、「ctrl-z+Enter」で終わりを示す。それから、11行目のToUpperメソッドは、文字列を大文字化する機能を持ったSystem.Stringクラスのメソッドである。
さて、これを使ってみよう。このサンプル・プログラムの実行ファイル名は、Sample003n.exeだとする。dirコマンドの出力を、パイプで、このサンプル・プログラムにつないで見よう。パイプは「|」記号で示す。「|」記号の手前に、標準出力をパイプに送る側のコンソール・アプリケーションを記述し、後に標準入力をパイプから受け取る側のコンソール・アプリケーションを記述する。例えば、dirコマンドとSample003nコマンドをパイプでつなぐなら、
dir | Sample003n
と記述する。以下はdirコマンドを単独で使った場合と、Sample003nとパイプでつないだ場合の実行結果を示す。
パイプを使用してサンプル・プログラム2を実行した結果例 | ||||||
|
パイプでSample003nを通すと文字列の中の小文字がすべて大文字に変わっていることが分かると思う。
パイプは何段階でも連続して使用できる。以下はさらにもう1段、findコマンドを接続した例である。findコマンドは、標準入力から入力されたテキスト中で、指定文字列が含まれている行だけを標準出力に出力する機能を持っている。
2段階にパイプを使用した例 |
dirコマンドの出力を入力として実行したサンプル・プログラム5の実行結果を、さらにfindコマンドに入力し、“EXE”という文字列を含む行のみを画面に出力している。 |
ここでは“EXE”という文字列を指定したので、それが含まれる行だけが出力されている。これは、dirコマンドで“*.exe”というワイルドカードを指定した場合と同じではないことに注意が必要だ。dir *.exe|Sample003nというコマンドを打った場合は以下のようになり、結果が異なる。
“*.exe”を指定したdirコマンドの出力を入力として、サンプル・プログラム2を実行した場合 |
バッチの活用
複数のコンソール・アプリケーションの組み合わせで便利な機能が実現できることは分かったと思うが、いつも同じ長ったらしいコマンドを打つのでは便利とはいえない。ヒストリ機能も、コマンド・プロンプトを閉じると内容が消えてしまうので、毎日パソコンを立ち上げたときに同じコマンドを実行、などと思うと不便である。
そんなときに便利な機能として、バッチというものがある。これは、コマンド・プロンプトから入力しているコマンドの内容をテキスト・ファイルに書いておくと、それを指定するだけで実行してくれるというものである。テキスト・ファイルの拡張子は、「.bat」としておく。OSによっては「.cmd」でも受け付ける。
例えば、こんな内容のテキスト・ファイルをsample001.batというファイル名で作成してみよう。
|
|
sample001.batというファイル名で作成したバッチ・ファイル |
ここで、3行目は、前回のサンプル・プログラム1(“Hello World!”を出力する)である。完全な絶対パスで書いてあるが、読者が試す場合はこの部分を変更する必要がある。4行目のpauseコマンドは何かキーが押されるまで待って終了するコマンドである。これを入れないと、一瞬で処理を終えてウィンドウが閉じてしまうのである。さて、このsample001.batファイルをエクスプローラなどで表示してダブルクリックすると以下のようになる。
上記のsample001.batファイルをエクスプローラなどから実行した結果例 |
1行目で、カレント・ディレクトリをc:\に変更し、そこでワイルドカード「*.txt」のファイル一覧を表示し、次にサンプル・プログラムを実行して、最後にキー入力待ちとなる。
INDEX | ||
連載 プロフェッショナルVB.NETプログラミング | ||
第22回 コンソール・アプリケーションの開発と活用(後編) | ||
1.コンソール・アプリケーションと入出力 | ||
2.パイプの活用 | ||
3.スケジュールして無人実行 | ||
「プロフェッショナルVB.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用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
|
|