Ruby on rails 关于在RubyonRails中解析文件的问题
我有一个文本文件(.txt),其中包含一个数组,这些数组的元素是字符串格式的,但它们也是数组。如下所示: 例如,让我将文件视为: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
["[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"