Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 尝试比较两个文本文件,并根据信息创建第三个文本文件_Ruby_Parsing - Fatal编程技术网

Ruby 尝试比较两个文本文件,并根据信息创建第三个文本文件

Ruby 尝试比较两个文本文件,并根据信息创建第三个文本文件,ruby,parsing,Ruby,Parsing,我有两个文本文件,master.txt和926.txt。如果926.txt中有一行不在master.txt中,我想写入一个新文件notinbook.txt 我写了我能想到的最好的东西,但考虑到我是一个糟糕的/新手程序员,它失败了。这是我的 g = File.new("notinbook.txt", "w") File.open("926.txt", "r") do |f| while (line = f.gets) x = line.chomp if File.o

我有两个文本文件,master.txt和926.txt。如果926.txt中有一行不在master.txt中,我想写入一个新文件notinbook.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
当然,它失败了。谢谢

使用:

%x(差异文件1文件2)


您可以这样做:

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
master_行=[]
打开(“notinbook.txt”,“w”)do | result|
打开(“master.txt”、“r”)do | master|
主控。每一条线都做一条线|
主线条这应该可以:

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
line1
line2
line4
line3
line5
master.txt

line1
line2
line3
line4
line5
line1
line2
line4
line3
line5
notinbook.txt

line1
line2
line3
line4
line5
line1
line2
line4
line3
line5
希望这有帮助

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?
dir=File.dirname(\uuuuu File\uuuuu)
notinbook=“#{dir}/notinbook.txt”
master=“#{dir}/master.txt”
f926=“#{dir}/926.txt”
def文件到存储库(文件)
ary=[]

每个{|行|都有可能,但如果我正确理解作者,他不会试图区分更改,而是检查给定文件中的行是否存在于另一个文件中?我修改了您的代码,试图保持这个想法,以便您可以看到缺少什么(您很接近!)尽管这样做意味着多次运行master.txt的相同行,因此效率不高,但它完成了任务。