как сохранить массив Ruby в файл? - PullRequest
14 голосов
/ 22 июля 2010

Как сохранить массив Ruby в файл?

Ответы [ 7 ]

18 голосов
/ 22 июля 2010

Я не уверен, что именно вы хотите, но, чтобы сериализовать массив, записать его в файл и прочитать обратно, вы можете использовать это:

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.

.
7 голосов
/ 22 июля 2010

Чтобы просто вывести массив в файл в стандартном формате [a, b, c]:

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

Это может быть не очень полезно, возможно, вы захотите прочитать его обратно?В этом случае вы можете использовать json .Установите, используя rubygems с gem install 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)
6 голосов
/ 22 июля 2010

Существует несколько способов выгрузить массив на диск.Вам нужно решить, хотите ли вы сериализовать в двоичном или текстовом формате.

Для двоичной сериализации вы можете посмотреть Marshal

Для текстового формата вы можете использовать json , yaml , xml (с rexml , builder , ...), ...

2 голосов
/ 22 июля 2010

Некоторые стандартные опции для сериализации данных в Ruby:

(Существуют другие, возможно, лучшие / более быстрые реализации YAML и JSON, но я ссылаюсь на встроенныедля начала.)

На практике я, кажется, чаще всего вижу YAML, но это может не свидетельствовать о чем-то реальном.

1 голос
/ 01 декабря 2013

Пример: запись text_area в файл, где text_area - массив строк.

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

Не забудьте проверить ошибки файловых операций:)

1 голос
/ 22 июля 2010

Вот быстрый пример 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"}
0 голосов
/ 22 июля 2010

Afaik .. файлы содержат строки, а не массивы. Когда вы читаете файлы, данные могут быть сохранены в массиве или других структурах данных. Я хочу знать, есть ли другой способ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...