Trying to compare two text files, and create a thi

2019-02-10 19:24发布

I have two text files, master.txt and 926.txt. If there is a line in 926.txt that is not in master.txt, I want to write to a new file, notinbook.txt.

I wrote the best thing I could think of, but given that I'm a terrible/newbie programmer it failed. Here's what I have

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

Of course, it fails. Thanks!

标签: ruby parsing
4条回答
叼着烟拽天下
2楼-- · 2019-02-10 19:49

This should work:

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

This was my test:

926.txt

line1
line2
line3
line4
line5

master.txt

line1
line2
line4

notinbook.txt

line3
line5
查看更多
Viruses.
3楼-- · 2019-02-10 19:51

You can do something like this:

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
查看更多
闹够了就滚
4楼-- · 2019-02-10 20:10

Hope this helps

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?
查看更多
登录 后发表回答