アプリ版:「スタンプのみでお礼する」機能のリリースについて

こんにちは。
当方Ruby初心者です。

最近Dir.globのメソッドを使用しているのですが、
Dir.globで取得した結果を1つずつ引数として取り出すにはどのようなメソッドを
組めば良いのでしょうか?

ご教授の程よろしくお願い致します。

A 回答 (3件)

http://oshiete.goo.ne.jp/qa/8813697.html
でも書きましたけど、マニュアル読みましょうよ。
熟練者だって、細かい点を確認するためにマニュアルを読みます。
それを初心者がサボってどうするんですか。


http://docs.ruby-lang.org/ja/2.1.0/class/Dir.htm …
にちゃんと
> パターンにマッチするファイル名を文字列の配列として返します。
と書いてあります。
「配列の中身を順番に処理する」って基本中の基本なわけですから、初心者用の入門書を読めばちゃんと書いてあります。

また
> ブロックが与えられたときはワイルドカードにマッチしたファイルを 引数にそのブロックを 1 つずつ評価して nil を返します
とも書いてあります。
Dir.glob("b*") {|f| p f }
というサンプルコードもちゃんと載っています。

ブロックを与える方法というのも、Rubyの基本ですから、ちゃんと初心者用の入門書にも書いてあります。
前の質問の中で、あなた自身が利用しています。
f.each_line do |line| ~ end というように。
    • good
    • 1
この回答へのお礼

ご親切に指摘してくださりありがとうございます。
返す言葉もありませんので、マニュアルからしっかり勉強しようと思います。

お礼日時:2014/11/06 22:29

>例えば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を実行したときに、全てファイル名だけであれば、問題ありませんが、
ディレクトリも含まれる場合は、そのディレクトリをスキップする必要があります。
その場合は、再度質問してください。
    • good
    • 1

サンプルです。


カレントディレクトリ下のファイル一覧を取得して、表示します。
files = Dir.glob("*")
files.each do |file|
print file,"\n"
end

不明点があれば、補足してください。

この回答への補足

回答ありがとうございます。
もう一つお聞きしたい事があるのですが、
回答者様のサンプルではprintの引数にDir.globの結果を当てはめていらっしゃいますが、
例えばFile.open(sample)などのメソッドの引数にDir.globの結果を渡したい場合はどうすればよいのでしょうか?
たびたびの質問すみません。ご回答の程よろしくお願いします。

補足日時:2014/11/06 17:49
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!