【问题标题】:How to print keys and values from a text file如何从文本文件中打印键和值
【发布时间】:2016-04-21 15:18:01
【问题描述】:

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

【问题讨论】:

  • 不要将该行分配给两个变量并将其放入哈希中并打印出来。只需解析它(可能使用正则表达式)并打印您想要的部分。
  • 你为什么不用yaml文件?
  • 是的,使用 YAML 或 JSON 要好得多,因为它使输出和解析变得非常简单。如果可以为您完成,您不应该手动编码格式化和解析。
  • @Dave Schweisguth 你能给出代码的例子吗?
  • 大家好,我正在使用我们服务器上的 ruby​​ 1.8.7 -- 使用 json 时出现错误,无法解析它。所以尝试另一种方式

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


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

【讨论】:

  • @mudasobwa 我得到这种格式的输出 name abc age 28 name xxx age 11 name yyyb age 15 。但我需要采用这种格式 abc 28 xxx 11 yyyb 15
  • 确实如此。对不起。已更新。
【解决方案2】:

最好的方法是使用一些流行的格式,比如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

【讨论】:

  • 感谢您的回复,但我可以看到文件中唯一的最后一个哈希值。输出 {"name" => "yyyb", "age" => 15"} 看不到文件中的其他值
  • @user1642224 你想输出什么?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多