2016-04-21 4 views
1

У меня есть файл под названием «output.txt»:Как печатать ключи и значения из текстового файла

"name": "abc", 
    "age": 28, 
    "name": "xxx", 
    "age": 11, 
    "name": "yyyb", 
    "age": 15, 

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

abc 28 
xxx 11 
yyyb 15 

код я написал это:

file_data = {} 
    object= File.open('output.txt', 'r') do |file| 
    file.each_line do |line| 
    key,value = line 
    file_data[value] = key 
    puts file_data 

Я получаю:

{nil=>" \"name\": \"abc"\",\n"} 
{nil=>" \"age\": 28,\n"} 
{nil=>" \"name\": \"11"\",\n"} 
{nil=>" \"age\": false,\n"} 
{nil=>" \"name\": \"yyyb\",\n"} 
{nil=>" \"age\": 15,\n"} 
+0

Не назначайте линию двух переменных и поместить его в хэш и печати, что. Просто проанализируйте его (возможно, с регулярным выражением) и распечатайте нужные вам части. –

+0

Почему вы не используете файл yaml? – 13aal

+0

Да, лучше использовать YAML или JSON, потому что он делает вывод и синтаксический анализ тривиально простым. Вы не должны быть форматированием и синтаксическим оформлением, если это может быть сделано для вас. –

ответ

0

Лучший способ - использовать какой-то популярный формат, например YAML или JSON, чтобы вы могли работать с ним, используя некоторую библиотеку. Кроме того, вы могли бы добиться этого с помощью следующего кода:

file_data = "" 
object= File.open('output.txt', 'r') do |file| 
    file.each_line do |line| 
    key, value = line.split(':').map{|e| e.strip.gsub(/(,|\")/,'')} 
    file_data << (key == 'name' ? "#{value} " : "#{value}\n") 
    end 
end 
puts file_data 
+0

Спасибо за ваш ответ, но я вижу только последний хэш из файла. вывод {"name" => "yyyb", "age" => 15 "} не может видеть другие значения из файла – user1642224

+0

@ user1642224 Что вы хотите получить в качестве вывода? –

+0

@ user1642224 см. обновленный ответ –

0
File.read('output.txt') 
    .split(/\s*,\s*/) 
    .each_slice(2) 
    .each do |name, age| 
    puts [name[/(?<=: ").*(?=")/], age[/(?<=:).*/]].join ' ' 
end 
+0

@ mudasobwa я получить выход в этом имя формата аЬс возраст 28 имя ххх возраст 11 имя yyyb возраст 15. Но я должен быть в этом формате аЬс 28 ххх 11 yyyb 15 – user1642224

+0

Oh действительно. к сожалению. Обновлено – mudasobwa

+0

спасибо @mudasobwa – user1642224

Смежные вопросы