KEN's .NET

[第5回] Consoleアプリケーションでフィルタプログラム1 - フィルタプログラムとは?

ホーム > KEN's .NET > [第5回] Consoleアプリケーションでフィルタプログラム1 - フィルタプログラムとは?

VB.NETでは、前回紹介したようなWindowsアプリケーション(GUI)以外にConsoleアプリケーション(CUI)を作成することができます。 今回はこれに注目して、フィルタプログラムを作成したいと思います。
私はVS.NETやVB.NET Standardなどを持っておらず、現在、使用しているのは.NET Framework SDK(SP1)です。

1.フィルタプログラムとは?

CUI?フィルタプログラム?なんじゃそりゃ?という方のためにまずはそれぞれについて簡単に説明します。
  • CUI ・・・ CUIはCharacter User Interfaceの略です。 その名の通り、文字でユーザに情報を表示し、ユーザからの指示もまた文字で受け取る、 文字ベースのインタフェースです。WindowsではDOSプロンプトがCUIインタフェースとなっています。 DOSプロンプトでDIRと打ち込んでEnterキーを押すとカレントフォルダのファイル/フォルダの一覧が文字で表示されますが、 このDIRコマンドはCUIプログラムの一つです。

  • フィルタプログラム ・・・ 標準入力からデータを読み込み、標準出力にデータを書き出すプログラムです。 標準入力や標準出力というのは論理的な入力/出力です。実際には、標準入力はキーボードからの入力であったり、 ファイルからの入力だったり、別のプログラムの出力からの入力だったりします。どこからの入力であるか?は、 DOSがうまく処理してくれるので、フィルタプログラム自身はその違いは感知せずに同じように扱います。 標準出力は画面への出力だったり、ファイルへの出力だったり、プリンタへの出力だったり、 別のプログラムの入力への出力だったりします。

さて、例を交えて、もう少しフィルタプログラムの説明をしたいと思います。 DOSコマンドにSORTコマンド(入力を並び替えて出力するプログラム)がありますが、これはフィルタプログラムの好例です。 次のように単にSORTと打ち込んでコマンドを実行するとキーボードからの待ち状態になります。 そこで数行入力します。そして、Ctrl+Z(コントロールキーを押しながらZキーを押す)します。 Ctrl+Zは入力を終了するという意味になり、画面上には^Zと表示されますが、これは入力にはなりません。 そして、Ctrl+Zにより入力が終了し、入力した内容がソート(並び替え)されて、画面に出力されます。

C:\>SORT  [ENTER]
ccccccccc
bbbbbbbb
aaaaaaaa
xxxxxxxx
dddddddd
^Z
aaaaaaaa
bbbbbbbb
ccccccccc
dddddddd
xxxxxxxx

この例では、キーボードから入力し、画面に出力しています。このプログラムはキーボードからの入力を処理し、 処理結果を画面に出力するプログラムなのではなく、あくまで標準入力を処理し、処理結果を標準出力に出力するプログラムです。 例えば、先ほどの入力内容が書かれたファイルsample.txtというファイルがC:\sample.txtにあるとすると以下のようなことができます。

C:\>SORT < sample.txt > sample_sorted.txt [ENTER]

これは、sample.txtを入力として(「<」マークで入力指定)、処理結果をsample_sorted.txtに出力します(「>」マークで出力指定)。 「<」や「>」で入出力の対象を切り替えることをりダイレクトといい、この場合、標準入出力をファイルに切り替えています。

さらに「|」記号(縦棒)を使うとパイプ(パイプライン処理)という機能が使えます。 これはあるコマンドの標準出力への出力を別のコマンドの標準入力として渡す機能です。 パイプを利用する典型として、いろんなコマンドとMOREコマンドを組み合わせることが多いです。
NT系のDOSコマンドには元々UNIX出身のMOREというコマンドがあります。 このコマンドは標準入力を受けて、入力データをページ単位で表示するコマンドで、長い出力結果を見るのに重宝します。 コマンドは以下のように使います。(sample.txtは長いテキストを想定します) sample.txtを適当なテキストファイルに置き換えて、実際にコマンドを打ってもらえばMOREコマンドの利用価値がわかると思います。

C:\>SORT < sample.txt | MORE [ENTER]

リダイレクションやパイプを説明しましたが、これらを使ってどんなことができるのかというと、例えば、以下のようなことができます。
  • 空行を取り除くコマンドAと行数を数えるコマンドBを組み合わせて、空行を除いた行数を数える
  • VB.NETのソースコードをキーワードやコメントを色付けしたHTML形式のデータにするコマンドCと行番号を付加するコマンドDを組み合わせて、VB.NETの情報サイトのソース掲載して説明に役立てる
それぞれのプログラムはごく単純な機能でよく、様々なフィルタプログラムを組み合わせることでかなりいろんなことができます。 GUIプログラムから内部的に起動して、フィルタプログラムに処理をさせて、GUIプログラムはそれをユーザにどう見せるか?という 部分だけを担当するというような組み方もできます。どうです?フィルタプログラムって可能性を秘めていると思いませんか?

今回は全然、.NETの話まで行けませんでしたが、次回はいよいよフィルタプログラムの作成に入りたいと思います。


ホーム > KEN's .NET > [第5回] Consoleアプリケーションでフィルタプログラム1 - フィルタプログラムとは?

[e-mail] yone_ken00@hotmail.com