- 締切済み
{Ruby}Dir.globの結果を引数として代入
こんにちは。 当方Ruby初心者です。 最近Dir.globのメソッドを使用しているのですが、 Dir.globで取得した結果を1つずつ引数として取り出すにはどのようなメソッドを 組めば良いのでしょうか? ご教授の程よろしくお願い致します。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- kmee
- ベストアンサー率55% (1857/3366)
http://okwave.jp/qa/q8813697.html でも書きましたけど、マニュアル読みましょうよ。 熟練者だって、細かい点を確認するためにマニュアルを読みます。 それを初心者がサボってどうするんですか。 http://docs.ruby-lang.org/ja/2.1.0/class/Dir.html#S_--5B--5D にちゃんと > パターンにマッチするファイル名を文字列の配列として返します。 と書いてあります。 「配列の中身を順番に処理する」って基本中の基本なわけですから、初心者用の入門書を読めばちゃんと書いてあります。 また > ブロックが与えられたときはワイルドカードにマッチしたファイルを 引数にそのブロックを 1 つずつ評価して nil を返します とも書いてあります。 Dir.glob("b*") {|f| p f } というサンプルコードもちゃんと載っています。 ブロックを与える方法というのも、Rubyの基本ですから、ちゃんと初心者用の入門書にも書いてあります。 前の質問の中で、あなた自身が利用しています。 f.each_line do |line| ~ end というように。
- tatsu99
- ベストアンサー率52% (391/751)
>例えばFile.open(sample)などのメソッドの引数にDir.globの結果を渡したい場合はどうすればよいのでしょうか? #1の回答の例であれば、以下のようになります。 カレントディレクトリ下のファイル一覧を取得して、そのファイルをオープンする files = Dir.glob("*") files.each do |file| File.open(file) ・・・・・以下、省略 end Dir.globの結果として、filesが取得できます。 これは、カレントディレクトリ下のファイル名(あるいはディレクトリ名)の配列になっています。 この配列の内容を1個づつ処理する場合は、each メソッドを使います。 files.each do |file| # file が1個のファイル名(あるいはディレクトリ名)をあらわしています。 end 尚、files と file の名前はなんでもよいです。 xxx = Dir.glob("*") xxx.each do |x| File.open(x) end でも同じ結果になります。 余談ですが、上記の例の場合、ディレクトリ名も取得する場合もありえます。 もし、あなたの環境でDir.globを実行したときに、全てファイル名だけであれば、問題ありませんが、 ディレクトリも含まれる場合は、そのディレクトリをスキップする必要があります。 その場合は、再度質問してください。
- tatsu99
- ベストアンサー率52% (391/751)
サンプルです。 カレントディレクトリ下のファイル一覧を取得して、表示します。 files = Dir.glob("*") files.each do |file| print file,"\n" end 不明点があれば、補足してください。
補足
回答ありがとうございます。 もう一つお聞きしたい事があるのですが、 回答者様のサンプルではprintの引数にDir.globの結果を当てはめていらっしゃいますが、 例えばFile.open(sample)などのメソッドの引数にDir.globの結果を渡したい場合はどうすればよいのでしょうか? たびたびの質問すみません。ご回答の程よろしくお願いします。
お礼
ご親切に指摘してくださりありがとうございます。 返す言葉もありませんので、マニュアルからしっかり勉強しようと思います。