在ruby中对文件进行漂亮的打印
我正在尝试将散列打印到文件中 我尝试了unix重定向[以增量方式向其添加了不同的标志]:在ruby中对文件进行漂亮的打印,ruby,file-io,pretty-print,Ruby,File Io,Pretty Print,我正在尝试将散列打印到文件中 我尝试了unix重定向[以增量方式向其添加了不同的标志]: `echo #{pp mymap} | tee summary.out 2>&1` 和文件IO my_file = File.new(@dir_+"/myfile.out",'w+') my_file.puts `#{pp get_submap_from_final(all_mapping_file,final_map)}` 它总是打印到控制台,而不写入文件 re
`echo #{pp mymap} | tee summary.out 2>&1`
和文件IO
my_file = File.new(@dir_+"/myfile.out",'w+')
my_file.puts `#{pp get_submap_from_final(all_mapping_file,final_map)}`
它总是打印到控制台,而不写入文件
require "pp"
require "json"
class File
def pp(*objs)
objs.each {|obj|
PP.pp(obj, self)
}
objs.size <= 1 ? objs.first : objs
end
def jj(*objs)
objs.each {|obj|
obj = JSON.parse(obj.to_json)
self.puts JSON.pretty_generate(obj)
}
objs.size <= 1 ? objs.first : objs
end
end
test_object = { :name => { first: "Christopher", last: "Mullins" }, :grades => [ "English" => "B+", "Algebra" => "A+" ] }
test_json_object = JSON.parse(test_object.to_json)
File.open("log/object_dump.txt", "w") do |file|
file.pp(test_object)
end
File.open("log/json_dump.txt", "w") do |file|
file.jj(test_json_object)
end
另外,在ruby中,必须有一种更简单的方法,在一行中写入文件?不是执行File.new然后写入文件?这里使用反勾号是令人困惑的,因为它们用于执行shell命令 你的意思可能是:
File.open(@dir_+"/myfile.out",'w+') do |f|
f.write(pp(get_submap_from_final(all_mapping_file,final_map)))
end
pp
方法总是写入控制台,这样您就可以看到它,并且仍然可以写入它。怎么样(不直接使用pp):
甚至重定向文件的标准输出
file = File.open("myfile.out", "w+)
old_stdout = STDOUT
$stdout = STDOUT = file
pp get_submap_from_final(all_mapping_file,final_map)
$stdout = STDOUT = old_stdout
做一些类似于Edu建议和帮助的事情 以下是新代码的相似之处:
$stdout.reopen(@dir_+"/my_file.out",'w+')
puts "All metrics are:"
pp final_map
$stdout=STDOUT
仍然有兴趣知道为什么重定向操作符>,以及2>&1在后刻度中不起作用需要“pp”
require 'pp'
File.open("test.txt","w") do |f|
PP.pp(self,f)
end
类文件
def pp(*objs)
objs.each{| obj|
PP.PP(obj,self)
}
objs.size这里是对上面文章的扩展,也可以将json输出漂亮地打印到文件中
require "pp"
require "json"
class File
def pp(*objs)
objs.each {|obj|
PP.pp(obj, self)
}
objs.size <= 1 ? objs.first : objs
end
def jj(*objs)
objs.each {|obj|
obj = JSON.parse(obj.to_json)
self.puts JSON.pretty_generate(obj)
}
objs.size <= 1 ? objs.first : objs
end
end
test_object = { :name => { first: "Christopher", last: "Mullins" }, :grades => [ "English" => "B+", "Algebra" => "A+" ] }
test_json_object = JSON.parse(test_object.to_json)
File.open("log/object_dump.txt", "w") do |file|
file.pp(test_object)
end
File.open("log/json_dump.txt", "w") do |file|
file.jj(test_json_object)
end
需要“pp”
需要“json”
类文件
def pp(*objs)
objs.each{| obj|
PP.PP(obj,self)
}
objs.size[“英语”=>“B+”,“代数”=>“A+”]}
test_json_object=json.parse(test_object.to_json)
打开(“log/object_dump.txt”,“w”)do|文件|
pp文件(测试对象)
结束
打开(“log/json_dump.txt”,“w”)do|文件|
jj(test_json_对象)
结束
给定问题中的mymap
,您可以使用,它提供了两种方法:显示\u数据
和格式化\u数据
。后者生成其参数的“漂亮打印”字符串,然后可以将该字符串提供给任何输出方法
require 'show_data'
$stderr.puts format_data(mymap)
例如:
myhash = { 'owners' => 21050, 'users' => 16877, 'portfolios' => 583,
'properylists' => 0, 'properties' => 29504, 'units' => 62688,
'tenants' => 85856 }
$stderr.puts format_data(myhash)
关于标准:
{ 'owners' => 21050,
'users' => 16877,
'portfolios' => 583,
'properylists' => 0,
'properties' => 29504,
'units' => 62688,
'tenants' => 85856
}
我认为即使在backticks中{}也会被ruby解释器解释。您提供的代码仍然输出到控制台,但不会写入文件:(它会被解释,是的,但是为什么您要将计算结果发送到shell?这是没有意义的部分。请记住反勾号与系统
非常相似。这是因为我认为我可以使用>和2>&1实现重定向到文件。这不起作用,所以我猜是错的:)…如何使pp重定向到文件,因为f.write也无法实现。thankx Edu.inspect看起来很优雅,但不幸的是,它没有在每个键值后添加新行。请解释一下stdout方法示例。我得到动态常量赋值$stdout=stdout=file error..唉,我也不太明白在这个示例中发生了什么代码:)…只是为了澄清,在上面的示例中,“self”的值将写入文件。如果你想写点别的。它将是PP.PP('将其写入文件',f)
{ 'owners' => 21050,
'users' => 16877,
'portfolios' => 583,
'properylists' => 0,
'properties' => 29504,
'units' => 62688,
'tenants' => 85856
}