#053 テキストファイルのススメ(後編)

1999/03/18

<前目次次>


 というわけで、テキストファイルの利点について述べた後編である。

 アプリケーションを使って処理をする場合に比べると、単なるテキストデータは処理が面倒であると一見思われるかも知れない。だが逆に、テキストファイルは時にアプリケーションの場合よりも柔軟なデータ処理が可能になるのである。

 もともとテキストファイルでデータを扱うという思想は、コンピュータ界では比較的長い歴史を持つOSであるUNIXの文化から来ている。UNIXでは、テキストファイルを扱うためのプログラムがいくつも用意されている。例えば、多くの行を含むテキストから条件にあうフレーズを含む行を取り出すgrep、ファイルの先頭や末尾の数行を取り出すhead/tail、複数の行をある規則をもとに並べ変えるsort、重複する行を一つにするuniq、長いテキストを一画面ずつ表示するmore、いくつものフィールドを持つ表データから特定のフィールドを抜き出すcut、簡単な文字列の置換操作などを行うsed、などである。これらのプログラムはいずれも、入力したテキストに何等かの処理を施して出力するという性質のもので「フィルタ」と呼ばれたりする

 それぞれのフィルタは上に挙げたように非常に単純な機能しか持たない。しかしこれらのフィルタはすべて、標準入力からデータを取得し、結果を標準出力に出力するという統一した使い方をするようになっている。標準入力は、通常は人間がデータを入力する道具、すなわちキーボードに割り当てられ、標準出力は、通常は人間がデータを確認する道具、すなわち画面に割り当てられている。これらのフィルタが使えるOSでは、一つのフィルタの出力を次のフィルタの入力につないで数珠つなぎに処理する「パイプ」という機能や、標準入力/標準出力をファイルなどに切り換える「リダイレクト」という機能を持っている。これらの機能を使うことによって、テキストデータを容易に大量に処理することが可能になるのである。例えば「テキストの住所録から電話番号を取り出し、それらのうち古い携帯電話番号と大阪市内局番を新しいそれに置き換えて、別のファイルに出力する」なんて操作も簡単に一瞬でできてしまうのである。

 もちろんこのような仕事をさせるためにはそれぞれのフィルタの機能について学習しなくてはならない。しかし学習する量は個々のアプリケーションを使いこなすための機能を覚える量よりも遥かに少なく、またこれらを知識をうまく組み合わせることによって、応用範囲は相乗的に広がるのである。

 最近では、これらのフィルタを更に進化させ、使う側が自由に機能を組合わせて一つの完結した仕事をするような「スクリプト」を書いて処理することの出来る、スクリプト言語というものもある。そしてその中でも応用範囲の広さや柔軟性や効率の良さという点で最右翼に立つものと思われるのが、前にも少し紹介したPerlというスクリプト言語である。特に昨今ではWebPageのCGIを記述する言語として脚光を浴び、参考書も俄かに多く書店に並ぶようになった。まあWebのCGIなんてごく一部の人しか書かないと思われるのでどうでもいいのだが、個人的には、テキストデータを処理するという点でPerlはこれ以上ないというくらい便利だと思っている。

 私も最初はPerlはとっつきにくいものと思っていたのだが、一度覚えてしまうと、ちょっとした機能のものならば簡単に思いどおりのスクリプトが書けるようになった。目的のスクリプトを一発で作り上げるのはやはり難しいが、コンパイルが不要なので、トライ&エラーが早く、従って短時間で目的の処理を行うスクリプトを作ることが可能なのである。今では、研究で使う各種観測データの処理の自動実行、メールの整理や自動処理、劇団の顧客名簿管理やアンケートなどの統計処理、個人データの加工修正や統計処理、WebPageの自動作成や更新などなどなど、ほとんどの仕事をPerlでやらせている。それらの多くは一度限りの処理をさせるための使い捨てのスクリプトであるが、中には長い時間をかけて改良を加えつつ現在も重宝して使っているものもある。

 紹介したUNIX系のフィルタやPerlなどのスクリプト言語は、MS-DOSにも移植されフリーソフトとして公開されている。テキストファイルとこれらのプログラムを使ったコンピューティングは、高い金を払ってアプリケーションを購入したりバージョンアップしたりする必要もない。またフィルタ系のプログラムはサイズが小さいため、今となっては古くて非力だと言われるようなパソコンでも充分動く。昨今のOSやアプリケーションが肥大化するにつれ高機能のパソコンを追うように買っていくのが滑稽に見えてしまうほどである。テキストデータ中心にコンピュータを使っている分には、昔のパソコンとMS-DOSのシステムさえあればそこそこ充分なのである。


<前目次次>