ARGFを作った
ARGFとは
rubyで使える機能で、入力を抽象化してくれます。
ARGFを使うとフィルタプログラムのようなコマンドラインプログラムが簡単に書けます。
これ、とっても便利でrubyでプログラム書くときは(知らずに)よく使います。
ARGFを使うと入力が標準入力だろうが、ファイルが引数で複数渡されようが、プログラムを全く変更しないで動作させることができます。
% vim cat.rb # cat と同じプログラム
ARGF.each {|line| print line} # 本当はもっと簡単に書ける
% ruby cat.rb < cat.rb # 標準入力から
phpでは
コマンドラインのプログラムが書きづらい。 ><
もともとweb用の言語なので、しょうがないといえばしょうがないかもしれない。
とはいえ、phpのプロジェクトをやってるとコマンドラインのプログラムもphpで書くわけです。
php用ARGF作った
php用のARGFを作ってみました。
php4, php5両方で動きます。
codereposにコミットしました。
サンプル
require_once('ARGF.php');
while ($line =& $ARGF->each()) {
echo $line;
}
使い方
require_once('ARGF.php');
ファイルをインクルードすると$ARGC, $ARGV, $ARGFが定義されます。
$ARGC
コマンドラインの引数の数になります。
ARGF::ARGC(); でも取り出せます。
$ARGV
コマンドラインの引数の配列になります。
ARGF::ARGV(); でも取り出せます。
$ARGF
メインのオブジェクトです。
他の関数の中とかスコープが閉じたところで使いたい場合は、適当にインスタンスを取り出してあげてください。
$ARGF = new ARGF();
$ARGF = ARGF::getInstance();
$ARGF->each()
一行ずつ取り出します。
$ARGF->toArray()
全ての入力を一行ずつの配列に変換します。
$ARGF->toString()
全ての入力を一つの文字列に変換します。
$ARGF->line
現在読み込んでる仮想的な行番号を示します。
$ARGF->filename
現在処理しているファイル名を示します。
まとめ
ARGFを使うとコマンドラインのプログラム書くのが楽になるよ!!
実はちょっと前に飲み会から帰ってきて勢いで作ったんだけど、せっかくだからcodereposに公開。