2011-09-29 12 views
5

İki metin dosyasına sahibim, master.txt ve 926.txt. Eğer master.txt'de olmayan 926.txt dosyasında bir satır varsa, yeni bir dosyaya yazmak istiyorum, notinbook.txt.İki metin dosyasını karşılaştırmaya ve üçte birini temel alarak bilgi oluşturmaya çalışıyorum

Düşünebildiğim en iyi şeyi yazdım, ancak başarısız/korkunç bir programcı olduğum için başarısız oldu. İşte bende bu, başarısız oluyor. Teşekkürler!

+0

yardımcı olur: // gist.github.com/1252609 bunun gibi bunu yapmak, birkaç kez aynı satırlar boyunca master.txt ile koşmak anlamına gelir, bu yüzden verimli değildir, ancak işi bitirir. – derp

cevap

0

Kullanım: Böyle bir şey yapabiliriz

VEYA

http://github.com/myobie/htmldiff/

+0

Ama yazar doğru bir şekilde anladıysam, değişiklikler için farklılık göstermeye çalışmıyor, ancak belirli bir dosyadaki satırların başka bir yerde var olup olmadığını kontrol ediyor mu? – JamesDS

1

http://raa.ruby-lang.org/project/compare/

VEYA

% x (fark dosya1 dosya2):

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

Bu çalışması gerekir:


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")) } 
Bu benim sınavım vardı:

926.txt

line1 
line2 
line3 
line4 
line5 

master.txt

line1 
line2 
line4 

line3 
line5 
+0

Mükemmel cevap ... –

+0

harika cevap. –

0

Umut notinbook.txt bu sana (! Yakın olduğunuzu) https eksik ne görebiliyordu fikrini korumaya çalışırken kodunuzu modifiye

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? 
İlgili konular