Как разобрать вывод array.inspect обратно в массив - PullRequest
1 голос
/ 23 июня 2011

Я хочу хранить многомерные массивы в текстовых файлах и эффективно их перезагружать. Сложность в том, что массив включает в себя строки, которые могут выглядеть как " ] , [ \\\"" или что-нибудь еще.

Самый простой способ записи таблицы в файл - это просто my_array.inspect (верно?)

Как мне затем воссоздать массив настолько быстро и безболезненно, насколько это возможно, из строки, считываемой из текстового файла, который может выглядеть как "[\" ] , [ \\\\\\\"\"]" (как в приведенном выше случае)?

Ответы [ 3 ]

4 голосов
/ 23 июня 2011

Если ваш массив содержит только буквально записанные объекты, такие как цифры, строки, массивы, хэши, вы можете использовать eval.

a = [1, 2, 3].inspect
# => "[1, 2, 3]"

eval(a)
# => [1, 2, 3]
2 голосов
/ 23 июня 2011

На мой взгляд, это звучит как слишком много проблем. Вместо этого используйте YAML .

require 'yaml'
a = [ [ [], [] ], [ [], [] ] ]
File.open("output.yml", "w") do |f|
  f.write a.to_yaml
end
b = YAML.load File.open('output.yml', 'r')

В качестве альтернативы вы можете использовать JSON .

0 голосов
/ 23 июня 2011

скажем, у вас есть массив

ary

Вы можете записать массив в файл:

File.open(path, 'w') { |f| f.write Marshal.dump(ary) }

, а затем заново создайте массив, прочитав файл в строку и сказав

ary = Marshal.load(File.read(path))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...