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

时间:2010-07-22 11:38:50

标签: ruby

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

7 个答案:

答案 0 :(得分:18)

我不确定你想要什么,但是,为了序列化数组,将其写入文件并回读,你可以使用它:

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"]

您可以探索其他替代方案,例如jsonYAML

答案 1 :(得分:7)

只需将数组转储为标准[a,b,c]格式的文件:

require 'pp'
$stdout = File.open('path/to/file.txt', 'w')
pp myArray

这可能没那么有用,也许你可能想读回来?在这种情况下,您可以使用json。使用带有gem install json的rubygems进行安装。

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)

答案 2 :(得分:6)

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

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

对于文字格式,您可以使用jsonyaml,xml(rexmlbuilder,...),...

答案 3 :(得分:2)

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

(还有其他的,可以说是更好/更快的YAML和JSON实现,但是我正在连接到内置版本。)

在实践中,我似乎经常看到YAML,但这可能并不代表任何真实的东西。

答案 4 :(得分:1)

这是一个简单的例子

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"}

答案 5 :(得分:1)

示例:将text_area写入text_area是字符串数组的文件。

File.open('output.txt', 'w') { |f| text_area.each { |line| f << line } }

不要忘记对文件操作进行错误检查:)

答案 6 :(得分:0)

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