Ruby中的File.open(' * .txt')?

时间:2015-11-12 18:48:02

标签: ruby-on-rails ruby rake

我有一个脚本,我遍历一些目录并在那里创建文件并在创建的文件中放入一些字符串。在我创建文件的目录中,存在一些我想打开的其他文件,并搜索一些特定的字符串以将它们复制到我创建的文件中。这个现有文件有" .sln"延期 。

在我创建文件,打开现有的.sln文件并解析它时,是否有一种简单的方法可以告诉Ruby。我想象的是:

File.open('*.sln', 'r')

我尝试过这样的事情:

sln_files = Dir.glob('*.sln', 'r')
File.open(sln_files)

还有这个方法:

Dir["/path/to/search/**/*.sln"]

但它给了我文件的完整路径。我只需要文件名

有什么想法吗?我希望有可能在File.open方法

中使用通配符

所以我在一个已经存在的主题上找到了解决方案(从Ruby文件夹中获取所有文件的名称)。那是:

files = Dir["/work/myfolder/**/*.txt"]

files.each do |file_name|
  if !File.directory? file_name
    puts file_name
    File.open(file_name) do |f|
      f.each_line do |line|
        if line =~ /banco1/
          puts "Found: #{line}"
        end
      end
    end
  end
end

1 个答案:

答案 0 :(得分:2)

一种解决方案可能是..

Dir.glob('*.sln').each do |filename|
  File.open(filename, 'r') do |file|
    # reading ...
  end
end

如果您只想要第一个文件,或者您确定只有一个文件,则可以创建辅助方法。

def with_open_file(pattern)
  filename = Dir.glob('*.sln').first
  File.open(filename, 'r') { |f| yield(f) }
end

with_open_file('*.sln') do |file|
  # reading ...
end