如何从文本文件中打印键和值

时间:2016-04-21 15:18:01

标签: ruby ruby-1.9.3 ruby-1.9 ruby-1.8.7

我有一个名为" 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"}

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

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