2016-04-21 28 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

最好的方法是使用一些流行的格式,如YAMLJSON,以便您可以使用某些库来处理它。此外,你可以使用如下代码实现它:

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我得到的输出以这种格式名为abc 年龄28 名XXX 11岁 名yyyb 15岁,但我需要在此格式ABC 28 XXX 11 yyyb 15 – user1642224

+0

哦,确实对不起。更新 – mudasobwa

+0

谢谢@mudasobwa – user1642224