诚招英才(长期):高级测试开发工程师、测试架构师,C++,java,ops; 联系方式:linhan@taobao.com msn: niuxvampire@hotmail.com

一个用ruby实现的比较文件的小工具

上一篇 / 下一篇  2008-03-12 18:28:24 / 个人分类:Toolkits

今天测试中遇到一个问题,原先能正常使用的系统,突然出现了问题,分析过后觉得可能是配置文件被改动了,但是配置文件中配置项上百,光靠眼睛看,根本找不到不同的地方,所以就用ruby现写了一个文件比较的小工具,感觉用起来还比较方便,就是功能不太强大,^_^

1|-}d:l5b1q|j:z,bo0

?X\ T8Rv-t Rv0执行:
1]3hzU JDnjH0命令行:程序路径 参数1:文件1路径,参数2:文件2路径

w:j{ J^ ^~-PH051Testing软件测试网NC8hG(FIT$F

=begin51Testing软件测试网 i%|_2Xy)w$g*Sb/Q
Filename: GetDiff51Testing软件测试网(T t"{-wd*n;V
Author: Nick Wang51Testing软件测试网$}_"CmW y;w
Date: 2008-03-12
f8Xym:`*U5Ky0=end
51Testing软件测试网j!ydnNJ

"Oh*YcG w)OQ$\~0#Compare two file51Testing软件测试网3d0B:mm&[&k%_B
def cmp2File51Testing软件测试网2kwS GS Sl
  f1=File.open($*[0],"r")51Testing软件测试网0d5lG8~.`1_
  f2=File.open($*[1],"r")51Testing软件测试网5F7D'HufO,T
  num=0

!_3OB:Xm0J8gW0
 
%D? xkL0  #Get data from file as array
3K2?3E7Tl}4y0]N0
  num1,f1array=getFileLine(f1)
d&` |Ld f lI0  num2,f2array=getFileLine(f2)
51Testing软件测试网zO3]9X2NN5OP1IZV
 51Testing软件测试网3iVd_dG
  #ensure the numberof loop51Testing软件测试网"U q `,zH~Ut
  if num1>num251Testing软件测试网9e@2rK&M!bW)Pu
    num=num1
K:?`m0y*vf w0  else
6](N w5P#G4p\0    num=num2
F9TC&gb0  end

0}O f&\&y.BF2wDG`/\0 
pQ u5s{ od0  #Loop: compare two linesfrom difference file
)e.V4GP1i5Q*?0
  for i in(0..num-1)51Testing软件测试网W ~9k y0Z2dA
    mesg1='Exception:Maybe file'51Testing软件测试网])VqN9@y}p
    mesg2=' was not enough lines. Cant find the data when check line '51Testing软件测试网;a$M#LN \&lK
   
F0z l.\:f\DB!?0    if f1array[i] != nil and f2array[i] != nil51Testing软件测试网y'b3^H"b~5yH
      if f1array[i] != f2array[i]
a(syo0g2W a$Smc0        puts '----num: '+i.to_s+"-----\n"51Testing软件测试网%qNo Q E#Z
        puts 'file1: '+f1array[i].to_s51Testing软件测试网a7gHwA.H p
        puts 'file2: '+f2array[i].to_s
4Y1[+G I*r0        puts "\n"
?vL0nb8Y&O0      end51Testing软件测试网.H6tV#pP,XefD
    else
"q,s i|E0      if f1array[i] != nil51Testing软件测试网8Ra2nYa;G"J5ke
        puts mesg1+'1'+ mesg2+(i+1).to_s
%M%q0@"o;q0        break
._%K(eT#S0      else if  f2array[i] != nil51Testing软件测试网 E ~%iN Kp/I] @
        puts mesg1+'2'+ mesg2+(i+1).to_s51Testing软件测试网0m3l#a7vI
        break
qA:LMk'Q0      else
0px[$P4J8W*y7F$wJ0        puts 'exception on "if f1array[i] != nil and f2array[i] != nil"'
~b(Q'})q X0        break51Testing软件测试网 X*_ I7nv]
      end
*TL _y3}1z`F0      end51Testing软件测试网:W$C,OV0qiM t+b8Ki
    end51Testing软件测试网 P(Z;?)v#A
  end51Testing软件测试网 }^|8l(JP
 51Testing软件测试网#E|N9vfi:j c
  f1.close
(c"DSzByD0  f2.close
p B._*Q7K?kSR0end
51Testing软件测试网&c`%a3b F

n0JG pA,YT&H A a,W0def getFileLine(f)51Testing软件测试网9O0A)?]?*ec,^B
  farray=[]
$dux!aG)L0  num=051Testing软件测试网u'\0q6a:Viw8oRB
  f.each do |fi|
xu/p%_ [9Q6E0    num+=1
\'Se d9B!C0    farray+=[fi.strip]
h^&e#\+l9R0  end
)a]$|n"u%Y0  return num,farray
\L/p:wo ` kc0end
51Testing软件测试网Dd$x%el~

51Testing软件测试网v*e,_+k~b

#run
)[z1i XxU5~4|7|i_0
cmp2File51Testing软件测试网)wM*Y%QkgB

51Testing软件测试网z"|h y^4A d oO

若是存在不同的行,则输出:51Testing软件测试网Uk/b@0C N_.j
----num:3-----51Testing软件测试网_S ^|E6V
file1: localname=nick51Testing软件测试网3d9xW@ e;y
file2: localname=bob
51Testing软件测试网yr K[&E eS#v5j.s6F

2tR&I.Hf+\ w LC1c4MS0若是有两个文件中行数不等,还会输出:51Testing软件测试网:[ wg(q*t)QG
Exception:Maybe file2 was not enough lines. Cant find the data when check line ..

vSuGm1Y#A1D051Testing软件测试网.~!VCW2C pj

若是两个文件完全相同,则无任何输出51Testing软件测试网(yu?'^ a-E&^(})k_1F

\?qix)Z"@0

51Testing软件测试网*hE?6iUV


TAG: Toolkits

 

评分:0

我来说两句

Open Toolbar