Hier ist ein Hash, den ich in einer Datei speichern, um später gelesen zu werden.Ein Hash von einer Datei auf der Festplatte lesen
my_hash = {-1 => 20, -2 => 30, -3 => 40}
File.open("my_file.txt", "w") { |f| f.write my_hash }
#how it looks opening the text file
{-1 => 20, -2 => 30, -3 => 40}
Wenn ich gehe, es zu lesen, ist, wo mein Problem ist. (Code finden Sie getrennt von oben)
my_hash = File.foreach("my_file.txt") { |f| print f }
p my_hash
#=> {-1 => 20, -2 => 30, -3 => 40}nil
dass nil
Verwirrungen der Rest meines code..not bis sicher, wie der, wenn loszuwerden. Nur aus Gründen der Klarheit der Rest des Codes ...
back_up_hash = {-1 => 20}
if my_hash.nil?
my_hash = back_up_hash
end
Das kleine nil
macht immer my_hash gleich back_up_hash. Ich brauche das .nil?
nur für den Fall, dass die Datei nicht den Hash hat, sonst wird das Problem nur weiter unten gedrückt.
Ich habe auch versucht (schlürfen? .. es ist eine kleine Datei) lesen Sie die Datei wie folgt ....
my_hash = File.read("my_file.txt") { |f| print f }
p my_hash
=> "{-1 => 20, -2 => 30, -3 => 40}"
# not sure how to get it out of string form...and I have searched for it.
Ich bin nicht mit Ruby vertraut, aber ich bin ziemlich sicher, dass Sie das Objekt in eine Datei serialisieren müssen, anstatt nur die Datenstrukturdarstellung zu schreiben. Wenn ich raten müsste, würde ich sagen, das ist Teil Ihres Problems. –
Sie könnten daran interessiert sein, mit dem ['Marshal'-Modul] (https://ruby-doc.org/core-2.2.2/Marshal.html) native Ruby-Objekte auf Festplatte zu speichern und sie schnell später zu laden. – Phrogz
@ Benutzer. Ja, dieser Thread hat eine funktionierende Antwort für mich .... und ich habe es vorher gesehen. Leider bin ich ein wenig überfordert und wenn die Antwort für meine Situation nicht annähernd perfekt ist, geht sie an mir vorbei. Danke, dass Sie auf diesen Link hingewiesen haben. Marshal sieht wie eine gute Lösung aus. – melee