1

たとえば、次のようなディレクトリ構造があります。

+SOURCE_CODE
          + MODULE_A
            -myfile.txt
          + MODULE_B
            -myfile.txt
          + MODULE_C   
            -myfile.txt

ここで、これらの各ディレクトリ (MODULE_A、MODULE_B) に「Dir.chdir」を実行し、これらのファイル内の文字列を操作する「myfile.txt」を開きます。次のようになります。

  Dir.chdir "../SOURCE_CODE/MODULE_*/"
  File.open("myfile.txt") do |f|
    f.each_line do |line|
      ......

「Dir.chdir」でワイルドカードを使用することはできません。しかし、別の方法はありますか?

4

2 に答える 2

2

でワイルドカードを使用できますDir.glob:

Dir.glob("../SOURCE_CODE/MODULE_*/myfile.txt") do |filename|
  File.open(filename) do |f|
    f.each_line do |line|
      # ...
    end
  end
end

ブロック内でやりたいことは何でもできます。

Dir.glob("../SOURCE_CODE/MODULE_*/") do |dirname|
  Dir.chdir(dirname)

  File.open("myfile.txt") do |f|
    f.each_line do |line|
      # ...
    end
  end
end

期待どおりに動作させるにDir.globは、絶対パスを指定する必要がある場合があります。Dir.chdirわからない。File.expand_pathこれには便利です。

于 2015-12-08T13:10:54.960 に答える
0

クラスを使用Pathnameして、ディレクトリ構造をトラバースできます

a = Pathname.new('/sourcecode')
a.children.each do |child1|
  child1.children.do |child2|
    if child2.file
       File.open(child2) do |f|
         f.each_line do |line|
         ...
    end 
  end 
end 
于 2015-12-08T13:08:37.613 に答える