Ruby: Gibt es eine bessere Möglichkeit, über mehrere (große) Dateien zu iterieren? - Ruby, Datei, Datei-Io, Refactoring

Hier ist, was ich tue (Entschuldigung für die Variablennamen, ich benutze diese nicht in meinem Code):

File.open("out_file_1.txt", "w") do |out_1|
File.open("out_file_2.txt", "w") do |out_2|
File.open_and_process("in_file_1.txt", "r") do |in_1|
File.open_and_process("in_file_2.txt", "r") do |in_2|
while line_1 = in_1.gets do
line_2 = in_2.gets        #input files have the same number of lines
#process data and output to files
end
end
end
end
end

Die open_and_process-Methode dient nur dazu, die Datei zu öffnen und sie zu schließen, sobald sie fertig ist. Sie wird aus dem Spitzhackenbuch genommen.

Wie auch immer, das Hauptproblem ist, dass der Code istzu tief verschachtelt. Ich kann nicht alle Dateien in den Speicher laden, also muss ich Zeile für Zeile iterieren. Gibt es einen besseren Weg, dies zu tun? Oder zumindest schön?

Antworten:

1 für die Antwort № 1

In Fällen, in denen dies nicht sinnvoll ist, müssen Sie die open-s-Block-Syntax nicht verwenden

http://ruby-doc.org/core/classes/IO.html#M002239


0 für die Antwort № 2

Ich bin nicht sicher, ob diese Version für den Zwei-Datei-Fall viel besser ist, aber sie ist sicherlich weniger tief verschachtelt.

outfiles = [1,2].map {|n| File.open("outfile#{n}.txt", "w") }
infiles =  [1,2].map {|n| File.open("infile#{n}.txt", "r")}
while (lines = infiles.map {|f| f.gets})).all?
lines.each_with_index {|l, n| outfiles[n].puts("processed #{l}")}
end
(outfiles + infiles).each {|f| f.close}

Am beliebtesten