免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1684 | 回复: 5
打印 上一主题 下一主题

请教一个自动比较两段程序的异同点脚本 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-08-22 11:32 |只看该作者 |倒序浏览
本帖最后由 xixizhihua 于 2012-08-22 11:32 编辑

大家好,最近工作上需要对两段程序进行比较,并报告这个程序有哪些更新。
我在写脚本,在比较两个子程序的时候,出现了问题,无法工作。

例如,该程序的1st版,和2st版,都有一个叫Porc ssx子程序。
去掉注释行,和空白行。
我把每行的内容分别存入了,@{$cmc1{$ssx}} 和@{$cmc2{$ssx}}中
我希望能像shell中diff命令一样,能够得到如下格式的结果:
set a $b ++(新增行)
puts $bana --(被删减行)

我自己写的脚本如下,所有需要比对的子程序名,已存入@name中
  1. for $aa (@same) {
  2.   for ($cmc1{$aa}[0]) {
  3.     if ($cmc1{$aa}[0] eq $cmc2{$aa}[0]) {
  4.     pop @{$cmc1{$aa}};
  5.     pop @{$cmc2{$aa}};
  6.     } else {
  7.       for ($i = 0;$i <= $#{$cmc2{$aa}};$i ++) {
  8.         if ($cmc1{$aa}[0] eq $cmc2{$aa}[$i]) {
  9.           pop @{$cmc1{aa}};
  10.           for ($c = 0;$c < $i;$c++) {
  11.           print RS "$cmc2{$aa}[0]";
  12.           pop @{$cmc2{$aa}};
  13.           }
  14.         }
  15.       }
  16.     }
  17.   }
  18. }
复制代码
自己改到最后都混乱了,脚本一直调不通。
思路是,第一个数组存旧程序,第二个数组存新程序。
从第一数组中取出第一个元素,如果和第二数组的第一个元素相同。则两个数组的该元素的移除。
如果,一个数组中的第一个元素,和第二数组中所有元素不同,则输出<该元素内容>--,并移除第一个数组中的该元素
如果,第一个数组中第一个元素,和第二数组中的第N个元素相同,则将第二个数组从0到N-1的所有元素,输出为<元素内容>++,并移除这些元素,以及两个数组中相同的元素。
重新开始执行第一步
直到第一个数组内,所有数据都被移除,循环结束。

希望各位前辈能指点一下,这个对比脚本,该怎么写,谢谢大家了。

论坛徽章:
0
2 [报告]
发表于 2012-08-22 11:34 |只看该作者
为什么不用diff/patch

论坛徽章:
0
3 [报告]
发表于 2012-08-22 11:39 |只看该作者
回复 2# longbow0


    你好,主要是我不会对某段文字用diff,另外也想自己试着实现一下diff命令功能~~
那个命令,具体怎么用能麻烦你说得更清楚点吗?

论坛徽章:
0
4 [报告]
发表于 2012-08-22 12:01 |只看该作者
何必呢,用现成的软件Beyond Compare,区别一目了然

论坛徽章:
42
19周年集字徽章-周
日期:2019-10-14 14:35:31平安夜徽章
日期:2015-12-26 00:06:30数据库技术版块每日发帖之星
日期:2015-12-01 06:20:002015亚冠之首尔
日期:2015-11-04 22:25:43IT运维版块每日发帖之星
日期:2015-08-17 06:20:00寅虎
日期:2014-06-04 16:25:27狮子座
日期:2014-05-12 11:00:00辰龙
日期:2013-12-20 17:07:19射手座
日期:2013-10-24 21:01:23CU十二周年纪念徽章
日期:2013-10-24 15:41:34IT运维版块每日发帖之星
日期:2016-01-27 06:20:0015-16赛季CBA联赛之新疆
日期:2016-06-07 14:10:01
5 [报告]
发表于 2012-08-22 12:59 |只看该作者
可以试试use Algorithm:iff qw(diff);模块
my $diffs = diff(\@CurrBuf, \@LastBuf);

不过还是diff命令快

论坛徽章:
0
6 [报告]
发表于 2012-08-22 14:10 |只看该作者
好的,谢谢楼上的朋友。
我再尝试下。
看来模块还是比较方便:)
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP