2013-06-01 1 views
0

두 파일을 읽고 두 파일에서 일치하는 패턴을 인쇄하려고합니다. 작동하지 않습니다. 누군가 내가 잘못하고있는 곳을 지적 할 수 있습니까?2 개의 파일을 읽고 일치 패턴을 인쇄하는 방법은 무엇입니까?

#!/usr/bin/perl 
open (FILE1, 'Dimension.csv'); 
my @dim=<FILE1>; 
close (FILE1); 

open (FILE2, 'SamsClub.dimension_refs.xml'); 
my @xml=<FILE2>; 
close (FILE2); 

for(my $i;$i<@dim;$i++){ 
    for(my $j;$j<@xml;$j++){ 
    if($xml[$j] =~ m/$dim[$i]/) { 
    print "Match found $xml[$j]"; 
    } 
    } 
} 

참고 : FILE1은 CSV 파일이고 FILE2는 XML 파일입니다.

CSV 샘플 파일

abc 
defe 
bald 

XML 샘플 파일은

<tem name="abc" version="2"/> 
+1

두 파일의 단편을 보여줍니다. 그러나 한 파일이 CSV이고 다른 파일이 XML 인 경우, 필드를 비교하기 위해 더 복잡한 스크립트가 필요합니다. –

+0

'@ dim '의 요소에는 개행 문자가 포함됩니다. 당신이 아마 당신이 일치하는 때 그들을 원하지 않으므로, 당신은 그들을 모두 chomp해야합니다. – Barmar

+0

** "작동하지 않음"은 무엇을 의미합니까? ** "작동하지 않음"은 문제를 이해하는 데 필요한 부적절한 설명입니다. 당신이 그것을 시도했을 때 무슨 일이 일어 났습니까? 잘못된 결과를 얻었습니까? * 결과가 없습니까? 결과가 정확하지 않은 경우 무엇이 잘못 되었습니까? 대신에 당신은 무엇을 기대 했습니까? * 정확한 결과를 얻었습니까? 그렇다면 그들은 무엇입니까? 우리를 추측하지 마십시오. –

답변

1

추가 :

chomp @dim; 

를 루프 전에.

+0

답변을 주셔서 감사합니다. 사실 저는 chomp도 시도했지만 작동하지 않았습니다. 디버깅 후 csv 파일에 컨트롤 M도 있다는 것을 알게되었습니다. 그래서 chomp 후에 컨트롤 M을 제거한 후에도 효과가있었습니다. – user1028948

3

당신이 배열로 파일을 읽고, 그들은 너무 \n 문자가 포함되어 있습니다. 따라서 $dim[0]abc\n이 포함되어있어 일치하지 않습니다. 확인

사람이 더 우아한 해결책을 게시 할 예정입니다,하지만 당신은 시도 할 수 있습니다 :

my @dim = map { chomp; $_} <FILE1>; 
+0

'chomp'는 매개 변수 목록에서 제거 된 총 문자를 반환합니다. 'map {chomp; $ _} '이 (가) 있습니다. –

+0

예, 물론입니다! 고맙습니다. 수정 됨./@Bramar의 솔루션은 어쨌든 더 좋았습니다.)/ – jm666

관련 문제