simxinzi 发表于 2008-9-22 09:52:32

AU3如何进行快速文本比较?

以下是借鉴本论坛某大侠的文本比较,可以实现2个文本的比较,但效率非常低,如果比对上万行或大几千行的文本非常的慢,而且对机器资源消耗很大,各位大侠有没有更好的解决办法?

另:我这样做的目的是为了从事先生成的两个文件列表进行比对,确定需要删除的文件列表:

#include <File.au3>
#include <Array.au3>
        Func _FileListCompare($hSouce,$hTarget,$hOutPut)
      $hLine_S = _FileCountLines($hSouce)
      $hCon_T = FileRead($hTarget)
      For $hSi = 1 To $hLine_S
                $hS_String = StringSplit(FileReadLine($hSouce,$hSi),"|")
                If Not StringInStr($hCon_T,$hS_String) Then
                        FileWriteLine($hOutPut,$hS_String)
                EndIf
      Next
        EndFunc

_FileListCompare("file.crc","aaa.txt","del.log")

l4ever 发表于 2008-9-22 16:16:02

最好是用dll取得md5值之后再比较文件.准确率高多了.
而且效率也大幅提升

simxinzi 发表于 2008-9-23 09:07:38

2楼没有理解我的意思

我并不是要得知2个文件是否有区别,而是找到差异的行,保存在另外一个文本中

炎舞风影 发表于 2008-9-23 17:37:18

楼主。至少在下认为用AU3来做这类事,是不明智的..

有时间学习下VC、Delphi之类的开发工具

sanhen 发表于 2008-9-23 20:04:36

用PB吧。。。AU3处理大文件,太耗时了。

所所思 发表于 2008-9-23 21:16:14

这类比较最好是交给文本编辑类软件 非常简单

simxinzi 发表于 2008-9-24 23:35:50

我自己想到了一个办法,用xp中自带的命令 FC

要比较的文件:

1.txt 内容如下:

line1
line2
line3
line4
line5
line8
line9
line10

2.txt 内容如下:


line3
line4
line5
line8
line11
line12

Fc 1.txt 2.txt >>3.txt

输出如下:

正在比较文件 1.txt 和 2.TXT
***** 1.txt
line1
line2
line3
line4
***** 2.TXT
line3
line4
*****

***** 1.txt
line8
line9
line10
***** 2.TXT
line8
line11
line12
*****

FC的比对算法非常的快,比对10M以内5万行左右的2个文本仅用时1分钟左右
FC的输出结果总有部分重复的部分,这个有办法去掉吗?调用FC来比较,然后用Au3来删除重复的行就可以达到快速文本比对的目的,请高人指点啊~

sanhen 发表于 2008-9-25 01:26:08

用BC2吧。:face (33):

kakinkgb 发表于 2008-9-26 21:34:25

bc2是什么?

zmj2008 发表于 2010-2-8 03:22:04

期待高人回答,本人也正在找这类东西

maxkingmax 发表于 2010-2-8 07:55:00

Beyond Compare2



Beyond Compare 是一套非常实用的文件及文件夹比较软件,不仅可以快速比较出两个文件夹的不同之处,还可以详细的比较文件之间的内容差异。程序内建了文件浏览器,方便您对文件、文件夹、压缩包、FTP网站之间的差异对比以及资料同步。您可以使用它管理程序源代码,同步文件 夹,比较程序输出,及验证光盘的复制。它还支持脚本处理、支持插件,尤其对中文支持很好。

软件有两套帮助系统,一个是外部的 CHM帮助文件,可以在帮助菜单中调用,另外一个就是内建的非常强大的上下文提示功能,算作是另一套帮助系统,在软件的各种设置里,如果看到关闭按钮附近有一个“?”按钮,您便可以按F1键获取详尽的中文说明。
页: [1]
查看完整版本: AU3如何进行快速文本比较?