2011-09-29 22 views
5

Tengo dos archivos de texto, master.txt y 926.txt. Si hay una línea en 926.txt que no está en master.txt, quiero escribir en un nuevo archivo, notinbook.txt.Intentando comparar dos archivos de texto y crear un tercero basado en información

Escribí lo mejor que pude pensar, pero dado que soy un programador terrible/novato, falló. Esto es lo que tengo

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 

Por supuesto, falla. ¡Gracias!

+0

he modificado el código de tratar de mantener la idea de lo que se podía ver lo que faltaba (que estaban cerca!) Https: // gist.github.com/1252609 aunque hacerlo de esta manera significa ejecutar varias veces las mismas líneas de master.txt, por lo que no es eficiente, pero hace el trabajo. – derp

Respuesta

1

Usted puede hacer algo como esto:

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

esto debería funcionar:

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")) } 

Esta fue mi prueba:

926.txt

line1 
line2 
line3 
line4 
line5 

master.txt

line1 
line2 
line4 

notinbook.txt

line3 
line5 
+0

Excelente respuesta ... –

+0

respuesta increíble. –

0

Esperanza esto ayuda

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? 
Cuestiones relacionadas