iT邦幫忙

0

[求教] 如何用perl 比對檔案內容?

有兩個文字檔,一個文字檔file1裡面放的是abcde,另一個file2放的是12345ab,
要怎麼寫才可以比對說file2 裡面沒有cde 然後把cde 列出來?

12
pail
iT邦新手 4 級 ‧ 2009-06-10 11:35:46
最佳解答

希望它不是作業!
希望你看得懂我寫啥~

<pre class="c" name="code">
open F1, "aaa" ;
chomp( @fileA=<F1> ) ;
close F1;
open F2, "bbb" ;
chomp( @fileB=<F2> ) ;
close F2;

$JJ=-1 ;
$hit = 0 ;
for $i ( 0..$#fileA) {
   if ( $JJ<0 ) { $JJ=0; }
   for $j ( $JJ..$#fileB ) {
     if ( $fileA[$i]!~$fileB[$j] ) {
     }
     else {
       $oldJJ=$JJ;
       $JJ = $j ;
       for ( $k=$oldJJ+1; $k<$JJ; $k++ ) {
         print("- $fileB[$k] \n");
       }
       $hit = 1 ;
       break;
     }
   }
   if ( $hit==0 ) {
   print( "+ $fileA[$i] \n");
   }
   $hit = 0 ;
}
if ( $JJ<$#fileB+1) {
   for ( $k=$JJ+1; $k<$#fileB+1; $k++ ) {
      print("- $fileB[$k] \n");
   }
}
lalelee iT邦新手 4 級 ‧ 2009-06-16 23:01:17 檢舉

有點像是diff啊 :)
我後來用的笨方法
STEP1:

open J, "1.txt" ;
chomp( @fileA=<J> ) ;
close J;
open L, "2.txt" ;
chomp( @fileB=<L> ) ;
close L;

open I,">INPUT.txt"; #兩檔案內容交集處

for $a (@fileA){

for $b (@fileB){
print I $b,"\n" if ($a eq $b );

}

}

close I;

STEP2

open I, "input.txt" ;
chomp( @fileA=<I> ) ;
close I;
open L, "2.txt" ;
chomp( @fileB=<L> ) ;
close L;

open I,">INPUT.txt";

for $a (@fileA){

for $b (@fileB){

$b=~ s/\b$a\b//; # 排除STEP1內容交集處

}

}

print I $_,"\n" for (@fileB);
close I;

第二次是扣掉已有的部份

10
ricky0512
iT邦新手 5 級 ‧ 2009-06-09 17:34:54
&lt;pre class="c" name="code">if ($檔案內容 !~ /cde/)
{
	print 檔案內容;
}
lalelee iT邦新手 4 級 ‧ 2009-06-09 18:06:21 檢舉

不好意思,我想要比較的是兩個檔案的內容

10
mistyman
iT邦新手 4 級 ‧ 2009-06-10 09:33:23

我想ricky的意思是

if ($檔案內容 !~ /$_/)
{
print 檔案內容;
}

有個疑問,這支可以執行嗎?

lalelee iT邦新手 4 級 ‧ 2009-06-10 10:19:20 檢舉

如果是"!~" 無法得到排除的結果,只要他不match pattern 就會列出來。

我要發表回答

立即登入回答