【问题标题】:Ruby: How to store each line from many .txt files into one variableRuby:如何将许多 .txt 文件中的每一行存储到一个变量中
【发布时间】:2020-07-16 03:16:14
【问题描述】:

我必须将位于不同目录中的 .txt 文件中的几行存储到变量中,但我不知道如何。

这是我打印这些 .txt 文件中每一行的代码,它工作正常,但我不知道如何将它们存储到一个变量中。

Dir.chdir "/path/to/dir"
Dir.glob("**/*.{mo,txt}").each do |filename|
  File.open(filename, "r") do |f|
    f.each_line do |line|
            puts line
        end
    end
end

我是 ruby​​ 的初学者,所以请帮忙!

【问题讨论】:

  • 您的问题是“如何构造一个包含给定目录中包含的每个文件的每一行的数组?”?如果是这样,并且如果还包含子目录中的文件,“如何构造一个数组,其中包含给定目录及其所有子目录中包含的每个文件的每一行?”

标签: ruby ruby-on-rails-4


【解决方案1】:

数组很适合这个

array = []
Dir.chdir "/path/to/dir"
Dir.glob("**/*.{mo,txt}").each do |filename|

  File.open(filename, "r") do |f|
    f.each_line do |line|
      array << line.gsub(/[\r\n]+/, ' ')
    end
  end
end

如果您想要其他解决方案:

Dir.glob("**/*.{mo,txt}").each do |filename|
  File.foreach(filename).map { |line| array << line.gsub(/[\r\n]+/, ' ') }
end

在线替换的正则表达式是删除任何不需要的换行符。所以一个由

组成的文件
1
2
3
4
5

没有正则表达式,您的数组将填充:

["1\n", "2\n", "3\n", "4\n", "5\n"]

使用正则表达式,将填充您的数组:

["1", "2", "3", "4", "5"]
        

【讨论】:

  • 非常感谢。问题解决了! :D 正则表达式不是必需的,但很高兴知道。
  • array.concat(IO.readlines(filename, chomp: true)) 也可以。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-20
  • 1970-01-01
  • 2012-07-03
  • 1970-01-01
  • 2012-11-23
  • 2015-05-19
相关资源
最近更新 更多