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