펄질문(패턴매칭)
글쓴이: joushua / 작성시간: 화, 2013/02/05 - 9:28오전
안녕하세요
펄관련해서 어려운점이 있어서 질문하게되었습니다.
펄로 찾고자하는 패턴이 있는 find.txt file을 가지고 찾고자하는 list.txt파일에서 패턴이 있는 행만 write해서 새로 temp.txt 파일로 추출하고자하는데
저는 배열로 각각의 파일을 넣고 이중for문을 이용해서 if($find[$1] =~ /$list[$j]/)로 코딩을 하였는데 if문이 작동이 되지 않아서
펄에서는 혹시 이중포문에서는 각각의 변수로 패턴 매칭을 하면 안대는지 궁금합니다.
또 만약 안대면 어떻게 해야댈지 조언부탁드립니다.
Forums:
...
$1은 $i의 오타죠?
글쓴이
네 오타입니다....
이중이든 이십중 루프든 전혀 상관은 없고...
이중이든 이십중 루프든 전혀 상관은 없고... find.txt 쪽에 패턴이 있는 거고 list.txt 쪽이 그 패턴을 포함한 문서라면, =~ 연산자의 좌우변이 바뀐 것 같군요. (찾을 패턴이 한 행 전체가 아닌 이상에는)
$list[$j] =~ /$find[$i]/
로 쓰셔야 매치가 제대로 되겠죠.
혹시 이것마저도 여기 적을 때 잘못 옮겨 적으신 거라면, 일단 작성하신 코드를 보여주시는 게 나을 듯 합니다.
좋은 하루 되세요!
글쓴이
open RD_FILE1, "asdf"; //find list file
open RD_FILE2, "asdfsaf" // list file
open WR_FILE, "sdffds" // write file
my @AR1;
my @AR2;
@AR1 = ;
@AR2 = ;
my $i=0;
my $j=0;
my $sig=0;
my $row=0;
for($i=0 ; $1 <= $#AR1 ; i++) {
$sig =0;
for($j=0; $j <= $#AR2 ; $j++) {
if($AR2[$j] =~ /$AR1[$i]){
if($sig==0){
print WR_FILE "$AR2[$j]";
$sig=1;
}
else{
$AR2[$j] =~ s/$AR1[$1]/ /ge; //이것은 sig가 1일때 즉 패턴매칭이 두번째일부터는 패턴을 지우고 나머지 행을 공백 뒤에 붙이기 위해 코딩
print WR_FILE "$AR2[$j]";
}
}
else {
last;
}
}
}
close WR_FILE;
close RD_FILE1;
close RD_FILE2;
글쓴이
위와 같은 코딩입니다.
많은 조언 부탁드리겠습니다.
필요한 부분만 대충 손으로 옮겨적으셔서 그런지
필요한 부분만 대충 손으로 옮겨적으셔서 그런지 컴파일에러까지 나는 코드라서... 이게 원래 잘못하신 건지 옮겨 적으면서 잘못하신 건지 구분을 할 수가 없네요.
오타라고 생각되는 부분($1 같은)은 생략하고
이렇게 수정하면 잘 돌아가는 듯 보이네요.
좋은 하루 되세요!
댓글 달기