如何将Ruby数组存储到文件中?

如何将Ruby数组存储到文件中?,ruby,Ruby,如何将Ruby数组存储到文件中?Afaik。。文件包含行而不是数组。读取文件时,数据可以存储在数组或其他数据结构中。我很想知道是否还有其他方法。要将数组转储到标准[a,b,c]格式的文件中,请执行以下操作: require 'pp' $stdout = File.open('path/to/file.txt', 'w') pp myArray 这可能没什么帮助,也许你想把它读回去?那样的话,你可以用。使用rubygems和gem安装json进行安装 require 'rubygems' req

如何将Ruby数组存储到文件中?

Afaik。。文件包含行而不是数组。读取文件时,数据可以存储在数组或其他数据结构中。我很想知道是否还有其他方法。

要将数组转储到标准[a,b,c]格式的文件中,请执行以下操作:

require 'pp'
$stdout = File.open('path/to/file.txt', 'w')
pp myArray
这可能没什么帮助,也许你想把它读回去?那样的话,你可以用。使用rubygems和
gem安装json
进行安装

require 'rubygems'
require 'json'
$stdout = File.open('path/to/file.txt', 'w')
puts myArray.to_json
重读一遍:

require 'rubygems'
require 'json'
buffer = File.open('path/to/file.txt', 'r').read
myArray = JSON.parse(buffer)

在Ruby中序列化数据的一些标准选项:

  • (自1.9版起内置,还提供各种宝石)
(还有其他可以说更好/更快的YAML和JSON实现,但我首先链接到内置。)


实际上,我似乎最常看到YAML,但这可能并不表示任何真实情况。

我不确定您到底想要什么,但是,要序列化数组,将其写入文件并读回,您可以使用以下方法:

fruits = %w{mango banana apple guava}
=> ["mango", "banana", "apple", "guava"]
serialized_array = Marshal.dump(fruits)
=> "\004\b[\t\"\nmango\"\vbanana\"\napple\"\nguava"
File.open('/tmp/fruits_file.txt', 'w') {|f| f.write(serialized_array) }
=> 33
# read the file back
fruits = Marshal.load File.read('/tmp/fruits_file.txt')
=> ["mango", "banana", "apple", "guava"]

您还可以探索其他替代方法,如
json
YAML

将阵列转储到磁盘的方法有多种。您需要决定是要以二进制格式还是文本格式进行序列化

对于二进制序列化,您可以查看


对于您可以使用的文本格式,xml(带,…),…

这里是一个快速的yaml示例

config = {"rank" => "Admiral", "name"=>"Akbar",
          "wallet_value" => 9, "bills" => [5,1,1,2]}

open('store.yml', 'w') {|f| YAML.dump(config, f)}
loaded = open('store.yml') {|f| YAML.load(f) }
p loaded 
# => {"name"=>"Akbar", "wallet_value"=>9,  \
#  "bills"=>[5, 1, 1,   2], "rank"=>"Admiral"}

示例:将text_区域写入文件,其中text_区域是字符串数组



File.open('output.txt','w'){f | text|u区域{| line |如果你的问题不清楚,你是在问如何将数组定义为ruby源代码的一部分,还是在问如何序列化磁盘上的数组?我说的是后者。很好,我不知道ruby 1.9中内置了JSONnow@ghoppe-是的,我应该在编辑中提到这一点。实际上我更喜欢使用yajl json-速度很快-但我不想这样o搞乱答案。我相信他们做了一些工作,使YAML成为JSON的超集。在使用Ruby 1.8时,您可能可以使用YAML解析器解析JSON。@Benjamin Oakes:从YAML 1.2开始就是这样。但是,Ruby 1.8和1.9.1中内置的YAML解析器/发射器基于规范的旧版本,而不是正确的JSON超集JSON。更糟糕的是:它甚至不符合规范。这只会在Ruby 1.9.2中有所改变。@Jörg W Mittag:真的吗?很高兴知道。我只在一些简单的事情上使用YAML,所以我没有遇到规范问题。你可以序列化数据结构,将它们保存到一个文件中,然后将它们重新加载。这是一种标准的方法来进行轻量级的测试-数据库。另外,我要说的是,“行”对于文件所包含的内容已经是一个相对较高的抽象级别了——它是一种以人为中心、以文本为中心的查看方式。但这是挑剔的。yaml格式比json慢,json比Marshal慢。请参见,对大型对象使用Marshal或json。