2011-09-29 13 views
5

Ho due file di testo, master.txt e 926.txt. Se c'è una riga in 926.txt che non è in master.txt, voglio scrivere su un nuovo file, notinbook.txt.Provare a confrontare due file di testo e creare un terzo in base alle informazioni

Ho scritto la cosa migliore che potessi pensare, ma dato che sono un programmatore terribile/novellino ha fallito. Ecco cosa ho

g = File.new("notinbook.txt", "w") 
File.open("926.txt", "r") do |f| 
    while (line = f.gets) 
    x = line.chomp 
    if 
     File.open("master.txt","w") do |h| 
     end 
     while (line = h.gets) 
     if line.chomp != x 
      puts line 
     end 
     end 
    end 
    end 
end 
g.close 

Naturalmente, non riesce. Grazie!

+0

ho modificato il codice cercando di mantenere l'idea così si poteva vedere quello che mancava (sei stato vicino!) Https: // gist.github.com/1252609 sebbene farlo in questo modo significa eseguire più volte le stesse righe di master.txt, quindi non è efficiente ma svolge il lavoro. – derp

risposta

1

Si può fare qualcosa di simile:

master_lines = [] 
File.open("notinbook.txt","w") do |result| 
    File.open("master.txt","r") do |master| 
    master.each_line do |line| 
     master_lines << line.chomp 
    end 
    end 

    File.open("926.txt","r") do |query| 
    query.each_line do |line| 
     if !master_lines.include? line.chomp 
     result.puts line.chomp 
     end 
    end 
    end 
end 
12

questo dovrebbe funzionare:

f1 = IO.readlines("926.txt").map(&:chomp) 
f2 = IO.readlines("master.txt").map(&:chomp) 

File.open("notinbook.txt","w"){ |f| f.write((f1-f2).join("\n")) } 

Questa era la mia prova:

926.txt

line1 
line2 
line3 
line4 
line5 

master.txt

line1 
line2 
line4 

notinbook.txt

line3 
line5 
+0

Risposta eccellente ... –

+0

risposta stupenda. –

0

Spero che questo aiuti

dir = File.dirname(__FILE__) 
notinbook = "#{dir}/notinbook.txt" 
master = "#{dir}/master.txt" 
f926  = "#{dir}/926.txt" 

def file_into_ary(file) 
    ary = [] 
    File.open(file).each{ |line| ary << line } 
    return ary 
end 

def write_difference(file, diff) 
    File.open(file, 'w') do |file| 
    diff.each do |line| 
     file.write(line) 
    end 
    end 
end 

diff = file_into_ary(f926) - file_into_ary(master) 
write_difference(notinbook, diff) unless diff.empty? 
Problemi correlati