首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

文本比较器的具体兑现方法

2013-01-04 
文本比较器的具体实现方法本帖最后由 jonny007x 于 2009-12-05 15:22:05 编辑小弟近来在写一个文本比较器,

文本比较器的具体实现方法
本帖最后由 jonny007x 于 2009-12-05 15:22:05 编辑 小弟近来在写一个文本比较器,但是碰到了,处理速度,内存占用,处理详细度这三者之间的冲突问题

所以上来求教各位高手给一个好点的方案

下面是我的方案

1读两个文本,并分别按行赋值给字符串数组tx1 和tx2

2然后对tx1 和tx2的各个数组元素逐个比较,用1记录相同,用0记录不同,并建立二元数组,以保存结果

3处理二元数组,计算出最短路径

4按最短路径输出文本,按照向同行在左右文本框里对齐的方法(用回车调整对齐)

5给不同的行着色


虽然我的方案已经实现,但是有几个缺点

首先就是内存占用问题,因为我把文本都读到数组里去了,两个几十K的代码文本比较要占用60多M内存。但是如果从文本框里处理,就要计算行号,获取行什么的,效率反而更低,而且考虑到之后还要输出,调整行对齐什么的,计算更烦,效率也更低

然后是处理速度的问题,本来我打算连相似行也计算出来的,但是计算相似行必定要计算字符相同问题,这么一来,对于动辄上万字符的代码,处理起来根本不行,10分钟都计算不出结果,所以我现在用的方法是比较字符串数组里相应数组是否相同,也就是说哪怕差一个空格或者一个tab就不同了

最后的问题是也就是上面速度问题中的差一个tab或者一个空格就会被判为不同,想要处理详细就要牺牲速度,但是速度太慢的话exe程序就会直接无响应

希望高手能指点我一下,因为我看到别人也用vb写出了文本比较器,而且运行还是较不错的,无论速度还是相似度,相似度,至少他可以判断文本头或尾差一个tab或者空格这两个文本还是相同的

另外,我用的是VB6
[解决办法]
参考:

http://topic.csdn.net/u/20080216/15/7a4e4f63-6c0f-4025-b2bc-a95c5c9d396e.html

也许不一定需要载入内存?
[解决办法]

我做过二进制文件的比较器。

实际上,文本文件也可以用二进制方式读取比较。优点是,系统不会尝试将文件在打开时就读入虚拟内存。当文件很大时,这样的操作会使系统长时间挂起。

我在做另外一个文本数据转换程序时,是将文件用二进制方式打开,每次读取几K来处理。可以用 StrConV 函数将读入的数据转成字符串,再用 Split 函数按行分割。最后不足一行的残余,保存到下一次读取时拼在前面。

这样做的好处,就是快。

热点排行