ARGFを作った

| | トラックバック(1)

ARGFとは

rubyで使える機能で、入力を抽象化してくれます。
ARGFを使うとフィルタプログラムのようなコマンドラインプログラムが簡単に書けます。

ARGF

これ、とっても便利でrubyでプログラム書くときは(知らずに)よく使います。
ARGFを使うと入力が標準入力だろうが、ファイルが引数で複数渡されようが、プログラムを全く変更しないで動作させることができます。

% vim cat.rb    # cat と同じプログラム
ARGF.each {|line| print line}    # 本当はもっと簡単に書ける
% ruby cat.rb < cat.rb    # 標準入力から
% ruby cat.rb foo.txt bar.txt    # 引数に複数ファイル渡しても大丈夫

phpでは

コマンドラインのプログラムが書きづらい。 ><
もともとweb用の言語なので、しょうがないといえばしょうがないかもしれない。
とはいえ、phpのプロジェクトをやってるとコマンドラインのプログラムもphpで書くわけです。

php用ARGF作った

php用のARGFを作ってみました。
php4, php5両方で動きます。
codereposにコミットしました。

ARGF

サンプル

% vim cat.php    # catと同じプログラム
each()) {
    echo $line;
}
% php cat.php < cat.php    # 標準入力から
% php cat.php foo.txt bar.txt    # 引数に複数ファイル渡しても大丈夫

使い方

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に公開。

トラックバック(1)

このブログ記事を参照しているブログ一覧: ARGFを作った

このブログ記事に対するトラックバックURL: http://blog.bz2.jp/bz2mt/mt-tb.cgi/251

第32回PHP勉強会に参加してきました。 LT枠でこの前作ったARGFを紹介させ... 続きを読む

ウェブページ

Powered by Movable Type 4.21-ja

このブログ記事について

このページは、masatoが2008年4月11日 20:50に書いたブログ記事です。

ひとつ前のブログ記事は「高専カンファレンスktkr」です。

次のブログ記事は「ウクレレをやることになったみたい」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。