〜Visual Basic開発ツールはVisual Basicだけにアラズ〜

汎用ツール利用のススメ
〜コラム〜

真崎 理人 MASAKI, Rihito
有限会社リヒトシステムズ



本文に戻る
コラム1:各汎用ツールのリファレンス(抜粋)と入手先
コラム2:正規表現(Regular Expression)




COLUMN 1:各汎用ツールのリファレンス(抜粋)と入手先
「grep」ファイルの全文検索ツール

 grepファミリー(grep, fgrep, egrep)は,パターンマッチングを行なうフィルタです.指定したファイル,または標準入力を検索してパターンと一致する行をすべて出力します.この機能を使用すれば,ある膨大なデータの中から自分の必要なデータを抜き出したり,ある変数がプログラム中のどこにあるかを探したりすることができます.

主な使用法・・・・・・・・・・・・・・・・・・・・・・・・・・・

 grep [pattern] [filename ...]

主なオプション・・・・・・・・・・・・・・・・・・・・・・・・・

 -nオプション:行番号を表示させる指定
 -vオプション:検索の意味を逆にする指定
 -fオプション:パターンファイルを指定

 grepは,grepファミリーの中で最も古いもので,他にfgrepとegrepという仲間がいますが,その基本的な動作は変わりません.

  • fgrepは複数の文字列を同時に高速検索します(正規表現は使用できません)
  • egrepはすべての正規表現を解釈します(grepと同じ正規表現が使用できますが,それ以外に「組み合わせ」と「グループ化」が使用できます)


「make」ソフトウェア開発プロジェクト向け,関連ファイル管理ツール

 makeは,複数のソースファイルから構成されるオブジェクトファイルの管理を支援するためのコマンドです.makeはメイクファイルに指定された各ファイルのタイムスタンプを比較し,必要であればあらかじめ決められたコマンドを実行することができます.主にC言語のプログラム開発に用いられ,ソースファイルとオブジェクトファイルのタイムスタンプを比較してソースファイルが新しければ,オブジェクトファイルのコンパイルを行なうために用いられています.

主な使用法・・・・・・・・・・・・・・・・・・・・・・・・・・・

 make -f [makefile]

メイクファイルの構成例

 prog.exe: prog1.obj prog2.obj(オブジェクトファイルとそのソースファイル)
 cl -o prog.exe prog1.obj prog2.obj(ソースファイルが新しいときに実行されるコマンド)

主なオプション・・・・・・・・・・・・・・・・・・・・・・・・・

 -fオプション:デフォルト以外のメイクファイルを指定
 -nオプション:コマンド行を実行しない指定
 -pオプション:マクロとターゲット情報の表示を指定

その他・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

 makeファミリーには,UNIX版make, Microsoft版nmake, Borland版makeなどがあります.その機能は概ね同一ですが,一部仕様の差異があるので注意が必要です.

「diff」ファイル内容を比較するツール

 diffは,指定した2つのファイルを比較し,異なっている部分を表示するコマンドです.

主な使用法・・・・・・・・・・・・・・・・・・・・・・・・・・・

 diff [oldfile] [newfile]

主なオプション・・・・・・・・・・・・・・・・・・・・・・・・・

 -iオプション:アルファベットの大文字小文字を区別しない指定
 -bオプション:連続している空白やタブの個数を無視する指定
 -cオプション:ファイルの異なっている部分の前後の行を表示する指定
 -eオプション:差分ファイルの出力を指定

その他・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

 diffコマンドの出力した差分ファイルとpatchコマンドを利用することにより,古いバージョンのファイルを新しいバージョンのファイルに置き換えることができます.

「awk」高機能なファイル処理言語

 awkはデータ操作のみならずさまざまな計算からレポートの作成までこなす高機能なプログラミング言語です.パターン一致(不一致に)対するアクションの記述に広く用いられています.

主な使用法・・・・・・・・・・・・・・・・・・・・・・・・・・・

 awk -f [script] [input-files]

その他・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

 その文法はC言語に似ており,C言語の入門用言語として学習されることも多い.また,awkの名の由来が作者であるAho氏,Weinberger氏,Kernighan氏の頭文字からなることは有名.

各ファイルの入手先例

 「grep」「make」「diff」「awk」
 ftp://crab.it.osha.sut.ac.jp/pub/WinNT/Win32tools/
 ftp://ftp.sra.co.jp/pub/gnu/gnu-win32/gnu-win32/

 「nmake」「WinDiff」
 Microsoft Visual C++に同梱されています.






COLUMN 2:正規表現(Regular Expression)入門
 正規表現とは,文字や記号を用いて文字の並びのパターンを表す方法です.あるデータの中からあるパターンの文字列を探したい場合には,正規表現はとても便利な方法です.
 自分の思い通りの文字の並びのパターンを作成するには,正規表現でのメタキャラクタ(特殊記号)の機能を知っておかなければなりません.

正規表現のメタキャラクタ(特殊記号)

任意の一文字
“.(ピリオド)”は,任意の一文字を表わします(改行は除く).たとえば“..”は,任意の文字が2つ連続しているという文字パターンになります.

行頭と行末
“^”は,行の先頭を表わします.たとえば,行の先頭が“VB”になっている文字パターンを表すと,“^VB”となります.
“$”は,行の末尾を表すメタキャラクタです.たとえば,行の末尾が“VC”になっている文字パターンを表わすと,“VC$”となります.

文字の範囲
“[]”は,括弧内に文字を並べ,その中のいずれか一文字に一致するというパターンを指定します.
括弧内では“-(ハイフン)”を使用して,文字の範囲を指定できます.
たとえば,文字が“V”か“B”であるパターンを表すと,“[VB]”となります.
また,
	[0-9]は,1字の数字
	[A-Z]は,1字の英大文字
	[a-z]は,1字の英小文字
	[a-zA-Z]は,1字の英文字
となります.

含まない指定
“[]”の括弧内の最初の文字に“^”を指定すると,その中の文字を含まないパターンを指定します.たとえば,文字が“V”か“B”以外のものであるパターンを表すと,“[^VB]”となります.
“[^0-9]”であれば,数字以外の任意の文字になります.

繰り返し
“*(アスタリスク)”は,直前の正規表現の0回以上の繰り返しを表わします.
たとえば,次のような文字の羅列を考えてみましょう.
        A
        B
        AC
        BC
        ACC
        BCC
これに対して“[AB]C*”は,すべての行にマッチしますが,“[AB]CC*”なら最初の2行はマッチ
しません.
このテクニックを利用して,1個以上のスペースのパターンを指定すると“□□*”となります.
“+(プラス)”は,直前の正規表現の1回以上の繰り返しを表わします.
上記の1個以上のスペースのパターンを指定すると“□+”となります.
“?(クエスチョンマーク)”は,直前の正規表現の0回か1回の繰り返しを表わします.
たとえば,下記のような文字の羅列すべてにマッチさせたい場合
        8086
        80168
        80286
        80386
        80486
“80[1234]?86”とパターンを指定することですべてにマッチします.

正規表現のグループ化
“()”は,正規表現をグループ化します.たとえば,“Visual(Basic)?”は,“Visual”だけにも“VisualBasic”にもマッチします.

組み合わせ
“|(縦棒)”は,正規表現の和集合の指定ができるようにします.“(正規表現1|正規表現2)”という記述で,正規表現1か正規表現2のいずれかに一致するパターンが指定できます.
また,次のように2つ以上指定してもかまいません.

“(正規表現1|正規表現2|正規表現3)”

メタキャラクタの働きの打ち消し
"\(バックスラッシュ、日本語環境では”\”)”は,メタキャラクタを普通の文字に変えるメタキャラクタです.“*”などを文字そのものとして扱う場合に使用します.たとえば「\*」と指定すると「*」アスタリスクそのものとして指定したことになります.





VB Magazine ライブラリ | Visual Basic WorkGroup
int21 ホームページ | PCDN ホームページ


Copyright (c) 1998 int21 Corporation All Rights Reserved.
For questions or comments, please send mail to: pcdn@int21.co.jp