比较Ruby中的两个文本文件



我有两个文本文件file1.txt和file2.txt。我想找到将突出显示相等,插入和删除文本的文件的差异。最终目标是创建一个具有不同颜色和样式的文本(相等,插入和删除文本(的HTML文件。

file1.txt

I am testing this ruby code for printing the file diff.

file2.txt

I am testing this code for printing the file diff. 

我正在使用此代码

 doc1 = File.open('file1.txt').read    
 doc2 = open('file2.txt').read
 final_doc =  Diffy::Diff.new(doc1, doc2).each_chunk.to_a

输出为:

-I am testing this ruby code for printing the file diff.
+I am testing this code for printing the file diff.

但是,我需要以类似于以下格式的输出。

equal:
  I am testing this
insertion:
  ruby
equal:
  code for printing the file diff.

在python中有一个可以通过它来实现的,但我在红宝石中没有发现这种功能。

我发现Ruby中有几个不同的库来进行" diffs",但它们更专注于按线进行检查。我创建了一些代码,这些代码用于比较几个相对较短的字符串并显示差异,这是一种快速黑客,如果突出显示它们已将其从 - 从 - 要这样做,就需要更多地考虑算法。但是该代码一次一次构成奇怪的奇迹。

关键是,就像在任何语言处理中一样,使您的令牌化正确。您不能仅通过Word处理字符串。真正最好的方法是首先循环,递归并将每个令牌与文本中的位置相关联并使用它来进行分析,但是下面的方法是快速简便的。

  def self.change_differences(text1,text2) #oldtext, newtext
    result = ""
    tokens = text2.split(/(?<=[?.!,])/) #Positive look behind regexp.
    for token in tokens
      if text1.sub!(token,"") #Yes it contained it.
        result += "<span class='diffsame'>" + token + "</span>"
      else
        result += "<span class='diffadd'>" + token + "</span>"
      end
    end
    tokens = text1.split(/(?<=[?.!,])/) #Positive look behind regexp.
    for token in tokens
      result += "<span class='diffremove'>"+token+"</span>"
    end
    return result
  end

来源:我!

相关内容

  • 没有找到相关文章

最新更新