2016-03-02 34 views
-2

即時通訊試圖比較2文本文件,我得到了下面的perl腳本,但由於某種原因,即使當我使用/ same /文件作爲基礎和過濾器,它沒有輸出任何東西。對於Perl來說,我真的很陌生,所以如果有任何聲音是基礎的話,請致歉。在Perl中的文件比較 - 按行或子字符串

my $file_base = 'CSP8216.TXT'; 
my $file_filter = 'CSP8216.TXT'; 

open my $info_filter, $file_filter or die "Die: Could not open $file_filter: $!"; 
while(my $line_filter = <$info_filter>) 
{ 
    open my $info_base, $file_base or die "Die: Could not open $file_base: $!"; 
     while(my $line_base = <$info_base>) 
     { 
      if("$line_filter"=="$line_base") 
      #if(substr($line_filter, 0, 11)==substr($line_base, 0, 11)) 
      { 
       print $line_base; 
      } 


     } 
     close $info_bae; 


} 
close $info_filter; 

難道有人指出爲什麼這似乎不起作用?

+0

使用'eq'來比較字符串:if($ line_filter eq $ line_base)。也'使用嚴格'看你的程序中的錯誤 – Jens

+0

與eq合作,我編輯了我的問題。謝謝你簡斯! – onlyf

+1

你不應該改變這個問題,因爲這個問題在編輯後沒有任何意義 – Jens

回答

0

我會做一點點不同 顯然,你可能想要做的文件推到一個數組,如果他們是大的。

use strict; 
use warnings; 

use Data::Dumper; 

my $file_base = '1.TXT'; 
my $file_filter = '2.TXT'; 

open (FILTER, "<$file_filter") 
     or die "Die: Could not open $file_filter: $!"; 

open (BASE, "<$file_base") 
    or die "Die: Could not open $file_base: $!"; 

my @filterArray = <FILTER>; 
my @baseArray = <BASE>; 
close BASE; 
close FILTER; 

unless(arrayDiff(\@filterArray , \@baseArray)) 
{ 
    print "Success!"; 
} 

sub arrayDiff { 
    my $array1 = shift(@_); 
    my $array2 = shift(@_); 

    my %array1_hash; 
    my %array2_hash; 

    # Create a hash entry for each element in @array1 
    for my $element (@{$array1}) { 
     $array1_hash{$element} = @{$array1}; 
    } 

    # Same for @array2: This time, use map instead of a loop 
    map { $array2_hash{$_} = 1 } @{$array2}; 

    for my $entry (@{$array2}) { 
     if (not $array1_hash{$entry}) { 
      return 1; #Entry in @array2 but not @array1: Differ 
     } 
    } 
    if (keys %array1_hash != keys %array2_hash) { 
     return 1; #Arrays differ 
    } 
     else { 
     return 0; #Arrays contain the same elements 
    } 
} 

perl的1156663.pl

成功!

2

使用eq比較字符串:

if($line_filter eq $line_base)

還可以使用use strict看到錯誤在你的程序