2011-09-29 62 views
5

我有兩個文本文件,master.txt和926.txt。如果926.txt中有一行不在master.txt中,那麼我想寫入一個新文件notin.txt。試圖比較兩個文本文件,並根據信息創建第三個

我寫了我能想到的最好的東西,但鑑於我是一個可怕的/新手程序員失敗了。下面是我有

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 

當然,它失敗。謝謝!

+0

我修改你的代碼試圖保持這個想法,所以你可以看到所缺乏的(你是接近!)https://開頭gist.github.com/1252609雖然這樣做的意思是幾次運行master.txt的同一行,所以效率不高,但它完成了工作。 – derp

回答

1

你可以做這樣的事情:

​​
12

這應該工作:

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

這是我的測試:

926.txt

line1 
line2 
line3 
line4 
line5 

master.txt

line1 
line2 
line4 

notinbook.txt

line3 
line5 
+0

優秀的答案... –

+0

真棒的答案。 –

0

希望這有助於

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?