Dir.glob
実践編で特定のディレクトリにあるファイルを扱う。だから、任意のディレクトリにある任意の拡張子のファイルのリストを取得する方法については解説が必須。
説明案(ボツ)。
dataディレクトリにファイル名の末尾が.txtのファイルが置かれている場合、次の方法でファイルのリストを取得できます。
p Dir.glob("data/*.txt") #=> ["./bar.txt", "./baz.txt"]
しかし、globのパターン指定が正規表現とはまた違うものであるところがややこしい。
説明案2。
プログラムを実行するディレクトリにdataというディレクトリがあって、その中に拡張子が「.txt」のファイルがいくつか置いてあるとします。
filenames = Dir.glob('data/*.txt') p filenames #=> ["data/0.txt", "data/1.txt", "data/2.txt"]次のプログラムは、dataディレクトリにある、拡張子が「.txt」のファイルの中身をすべて表示します。
filenames = Dir.glob('data/*.txt') filenames.each do |filename| text = File.read(filename) puts text endまた変数filenamesや変数filenameを省略して、次のように書くこともできます。
Dir.glob('data/*.txt').each do |filename| puts File.read(filename) enddataディレクトリに3つファイル「0.txt」、「1.txt」、「2.txt」が置いてある場合、上記のプログラムの実行結果は次のようになります。
0.txt 1.txt 2.txtDir.globによってファイル名のリストが配列に格納され、その配列に対してeachメソッドを呼び出して順番に処理しているわけです。
Dir.glob
Dir.globメソッドの引数には検索するファイル名を示すパターンを与えます。パターンは文字列で与えますが、このとき「*」を使うと「*」の部分は任意の文字列にマッチします。Dir.globに渡すパターンは正規表現ではないので注意してください。
パターンにマッチするファイルが見つからなかった場合は空の配列を返します。
うーん、そもそもパスについての説明が必要だよな。環境依存の話は大丈夫かな。