【问题标题】:Get filename within project in Ruby on Rails在 Ruby on Rails 中获取项目中的文件名
【发布时间】:2013-11-23 18:44:42
【问题描述】:

我需要使用 Ruby 从我的项目中提取文件名并从中提取第一个单词。我已经用我在这个网站上找到的解决方案进行了尝试,但没有成功:

File.basename("/path/to/folder/here_is_my_file.rb").match(/[^_]+/)

这会按预期返回 =>“这里”。

然而,我需要的是在不知道它应该是什么的情况下获取“这里”,因为文件名的第一部分是动态生成的。因此,我需要找到一种动态提取它的方法。

如何实现?

【问题讨论】:

  • 如果您知道/path/to/folder,那么您可以使用Dir 类获取目录中的所有文件。看看 Ruby API:ruby-doc.org/core-2.0.0/Dir.html#method-i-each 也许有更好的方法来解决这个问题。什么是动态生成这些文件,你的用例是什么?
  • 文件名是项目内启动不同“作业”的条件。因此,根据文件的名称以及在系统中的位置,将调用不同的方法。
  • 如果文件的名称类似于“main_file.rb”,则应调用某个方法,如果文件名称类似于“sub_file.rb”,则应调用另一个操作。
  • 我不明白这些文件是如何到达那里的,Rails 是如何知道要查找它们的。如果某个守护进程正在将文件放入系统中,为什么不直接访问 Rails 堆栈,而不是使用所有必需的作业信息?
  • Dir['/path/to/folder/*_my_file.rb'] 将为您提供与该模式匹配的所有文件,然后您可以遍历收集的文件并提取 * 并检查您的条件。如果这就是你想要的。

标签: ruby-on-rails ruby ruby-on-rails-4 ruby-2.0


【解决方案1】:

您需要在您的路径中找到与*_file.rb 模式匹配的文件。
为此,请使用 Ruby 中 Dir 类中的 globbing

matched_files = Dir['/path/to/folder/*_file.rb']
#=> ['/path/to/folder/main_file.rb', '/path/to/folder/sub_file.rb', '/path/to/folder/foo_file.rb']

现在,您可以通过遍历这些文件来提取基本名称:

base_files = matched_files.map { |file| File.basename(file) }
#=> ['main_file.rb', 'sub_file.rb', 'foo_file.rb']

此外,如果您只想从中提取 ma​​insubfoo,您可以匹配模式来执行此操作:

base_files.map { |file| file.match(/(.*)_file.rb/)[1] }
#=> ['main', 'sub', 'foo']

收集到文件名后,您可以根据条件检查这些名称以执行该文件的任何内容..

祝你好运。

【讨论】:

    猜你喜欢
    • 2011-09-09
    • 1970-01-01
    • 1970-01-01
    • 2010-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-04
    相关资源
    最近更新 更多