#blognavi
#blognavi
囲碁ROBOT、地の計算についてのトラブル 解決のために、Rubyでも使ってみましょうか。
WindowsでGnuGoをコンパイルした際に、MSYS/MinGWをインストールしていたので、mingw32用のバイナリを探す。まぁ適当に、ruby-1.8.4-i386-mingw32.tar.gzを選ぶ。ダウンロード、解凍。適当に C:\Ruby184 とでも作って、C:\Ruby184\bin にパスを通しておしまい。さっそくMSYSで
$ ruby -v
とタイプ。
ruby 1.8.4 (2005-12-24) [i386-mingw32]
と反応があったので、環境は整いました。
で、今回何がやりたいかというと、「ある条件に見合う文字列を比較し、そのファイル名を抽出」ということです。順番にやっていきましょう。Rubyチュートリアル によれば、
- ファイル名の表示
filename=ARGV[0] print filename
- sample.txtに対する文字列処理
file=open("sample.txt") file.each {|line| 「文字列処理」 } file.close
ということは、
- 条件を満たす文字列を含むファイル名の表示
filename=ARGV[0] file=open(filename) file.each {|line| if 「文字列処理」 print filename end } file.close
でいいはず。1.txt, 2.txt, 3.txt とファイルを作ってそれぞれ内容は、1, 12, 123 としておく。 「文字列処理」を line = = 1 としてみよう。具体的には、
filename=ARGV[0] file=open(filename) print filename # whileテスト用 file.each {|line| print filename # lineテスト用 if line == '1' print filename end } file.close
これを test.rb というファイル名で保存し
$ ruby test.rb *.txt
しかし「1.txt」が3回しか表示されません。つまり 1.txt しか読み込んでないことになります。んー。。。と考えてるとヒントは同じページに書いてありました。
for i in 0..「ファイル数-1」 do filename=ARGV[i] 「各ファイルに対する処理」 end
ファイル数を自動取得できればいいけど、費用対効果の問題で、パス。
for i in 0..2 do filename=ARGV[i] file=open(filename) file.each {|line| if line == '1' print filename end } file.close end
ま、こんなとこでしょう。あとは目的の「文字列処理」に書き直さないと。とりあえず今日はここまで。
リンク
- Rubyチュートリアル
- プログラマのためのリンク集
- プログラマのためのリンク集(Ruby)
- Ruby公式HP
- Ruby インストールガイド
- mingw32 (バイナリ)
- WindowsでのPATHの通し方
カテゴリ: [ruby] - &trackback() - 2006年09月27日 01:14:41
#blognavi