ruby file-io pretty-print

ruby - bonita impresión a un archivo en rubí



file-io pretty-print (7)

¿Qué pasa con (no usar pp directamente):

File.open("myfile.out","w+") do |f| f.puts mymap.inspect end

O incluso redirigir stdout para el archivo

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

Estoy intentando imprimir bastante un hash a un archivo.

Intenté redirecciones de Unix [agregué banderas diferentes a él de forma incremental]:

`echo #{pp mymap} | tee summary.out 2>&1`

y archivo IO

my_file = File.new(@dir_+"/myfile.out",''w+'') my_file.puts `#{pp get_submap_from_final(all_mapping_file,final_map)}`

Siempre imprime en la consola y no escribe en un archivo.

También tiene que haber una manera más fácil de escribir en el archivo en una línea en ruby? en lugar de hacer File.new y luego escribir en un archivo?


Aquí hay una expansión de la publicación anterior para imprimir bastante bien el archivo json en un archivo.

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


Dado el mymap de la pregunta, puede usar la gema "show_data" , que proporciona dos métodos: show_data y format_data . Este último produce una cadena "bastante impresa" de su argumento que luego puede alimentar a cualquier método de salida.

require ''show_data'' $stderr.puts format_data(mymap)

Por ejemplo:

myhash = { ''owners'' => 21050, ''users'' => 16877, ''portfolios'' => 583, ''properylists'' => 0, ''properties'' => 29504, ''units'' => 62688, ''tenants'' => 85856 } $stderr.puts format_data(myhash)

en STDERR:

{ ''owners'' => 21050, ''users'' => 16877, ''portfolios'' => 583, ''properylists'' => 0, ''properties'' => 29504, ''units'' => 62688, ''tenants'' => 85856 }


El uso de backticks aquí es desconcertante ya que se usan para ejecutar comandos de shell.

Lo que probablemente quieras decir es:

File.open(@dir_+"/myfile.out",''w+'') do |f| f.write(pp(get_submap_from_final(all_mapping_file,final_map))) end

El método pp siempre escribe en la consola para que pueda verlo y aún tenerlo escrito.



require ''pp'' File.open("test.txt","w") do |f| PP.pp(self,f) end


require ''pp'' class File def pp(*objs) objs.each {|obj| PP.pp(obj, self) } objs.size <= 1 ? objs.first : objs end end File.open(''output'',''w'') do |file| file.pp mymap end