Ruby on rails 关于在RubyonRails中解析文件的问题

Ruby on rails 关于在RubyonRails中解析文件的问题,ruby-on-rails,arrays,ruby,file,parsing,Ruby On Rails,Arrays,Ruby,File,Parsing,我有一个文本文件(.txt),其中包含一个数组,这些数组的元素是字符串格式的,但它们也是数组。如下所示: 例如,让我将文件视为: ["[1, 2016-11-18 07:38:26 +0000, \"ho\"]","[1, 2016-11-18 07:38:29 +0000, \"hose cla\"]", "[1, 2016-11-18 08:24:54 +0000, \"mo\"]"] 现在我想解析这些文件,我需要以以下格式打印数据: 1 2016-11-18 07:38:26 +00

我有一个文本文件(.txt),其中包含一个数组,这些数组的元素是字符串格式的,但它们也是数组。如下所示:

例如,让我将文件视为:

["[1, 2016-11-18 07:38:26 +0000, \"ho\"]","[1, 2016-11-18 07:38:29 +0000, \"hose cla\"]", "[1, 2016-11-18 08:24:54 +0000, \"mo\"]"]
现在我想解析这些文件,我需要以以下格式打印数据:

1   2016-11-18 07:38:26 +0000   ho

1   2016-11-18 07:38:29 +0000   hose

1   2016-11-18 08:24:54 +0000   mo
现在,我不知道从哪里开始。我知道如何用ruby解析文本文件,但这次它包含一个数组。因此,我对如何开始感到困惑,并没有得到正确的想法

请给我一些提示来帮助我

提前感谢

我使用以下代码将文件内容存储到数组中。但它没有给我正确的格式。我的文件以连续方式包含数组。这里面没有新线。我认为这是导致以下代码出现问题的原因

arr=[]

arr=File.foreach('input.txt').map { |line| line.split(' ') }
试着跟随

array = ["[1, 2016-11-18 07:38:26 +0000, \"ho\"]","[1, 2016-11-18 07:38:29 +0000, \"hose cla\"]", "[1, 2016-11-18 08:24:54 +0000, \"mo\"]"]

array.each do |a|
  puts a.gsub(/[\[\]\\",]/, '')
end
输出:

1 2016-11-18 07:38:26 +0000 ho
1 2016-11-18 07:38:29 +0000 hose cla
1 2016-11-18 08:24:54 +0000 mo
读取文件

array = File.readlines('path/to/file.txt')
现在,您可以对数据执行任何操作

编辑:


如何将我的文件内容放入这个数组变量中

您可以使用

arr = File.readlines("#{Rails.root}/file.txt").map(&:strip)
strip
只是删除任何附加空格

答案 您可以使用json解析文件,该文件看起来像一个字符串数组:

require 'json'
array = JSON.parse(File.read('file.txt')).map{|string| string.delete('[],"')}
您的阵列现在如下所示:

  ["1 2016-11-18 07:38:26 +0000 ho",
   "1 2016-11-18 07:38:29 +0000 hose cla",
   "1 2016-11-18 08:24:54 +0000 mo"]
如果需要第一行,只需使用
array.first

旧答案 这可能是最简单的方法,可以删除每行末尾的换行符,并删除所有指定的字符:

array = ["[1, 2016-11-18 07:38:26 +0000, \"ho\"]","[1, 2016-11-18 07:38:29 +0000, \"hose cla\"]", "[1, 2016-11-18 08:24:54 +0000, \"mo\"]"]

puts array.map{|string| string.chomp.delete('[],"')}
#=> ["1 2016-11-18 07:38:26 +0000 ho",
#    "1 2016-11-18 07:38:29 +0000 hose cla",
#    "1 2016-11-18 08:24:54 +0000 mo"]
要仅显示第一行,请执行以下操作:

puts array.map{|string| string.chomp.delete('[],"')}[0]
#=> "1 2016-11-18 07:38:26 +0000 ho"

您是否可以将文件内容更改为类似于
12016-11-18 07:38:26+0000,“ho”\n 12016-11-18 07:38:26+0000,“ho”
的内容,或者您希望按原样解析文件?我希望按原样解析文件。这是一个系统生成的文件。该文件是否只有一行,完全按原样写入?它是此格式的单个数组。如何将我的文件内容放入此数组变量?如何将我的文件内容放入此数组变量?好的,,,现在我可以读取该文件并创建数组。但是上面的代码没有显示期望的结果。我使用了puts array.map{124; string{124; string.chomp.delete('[],“)}而且如果我只想打印“1 2016-11-18 07:38:26+0000 ho”,那么我应该写什么?更新的答案。只需要数组的第一个元素。这是我认为最好的方式,,,非常感谢@Eric Duminil
puts array.map{|string| string.chomp.delete('[],"')}[0]
#=> "1 2016-11-18 07:38:26 +0000 ho"