펄질문(패턴매칭)

joushua의 이미지

안녕하세요
펄관련해서 어려운점이 있어서 질문하게되었습니다.

펄로 찾고자하는 패턴이 있는 find.txt file을 가지고 찾고자하는 list.txt파일에서 패턴이 있는 행만 write해서 새로 temp.txt 파일로 추출하고자하는데
저는 배열로 각각의 파일을 넣고 이중for문을 이용해서 if($find[$1] =~ /$list[$j]/)로 코딩을 하였는데 if문이 작동이 되지 않아서
펄에서는 혹시 이중포문에서는 각각의 변수로 패턴 매칭을 하면 안대는지 궁금합니다.

또 만약 안대면 어떻게 해야댈지 조언부탁드립니다.

jick의 이미지

$1은 $i의 오타죠?

joushua의 이미지

네 오타입니다....

raymundo의 이미지

이중이든 이십중 루프든 전혀 상관은 없고... find.txt 쪽에 패턴이 있는 거고 list.txt 쪽이 그 패턴을 포함한 문서라면, =~ 연산자의 좌우변이 바뀐 것 같군요. (찾을 패턴이 한 행 전체가 아닌 이상에는)
$list[$j] =~ /$find[$i]/
로 쓰셔야 매치가 제대로 되겠죠.

혹시 이것마저도 여기 적을 때 잘못 옮겨 적으신 거라면, 일단 작성하신 코드를 보여주시는 게 나을 듯 합니다.

좋은 하루 되세요!

joushua의 이미지

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;

joushua의 이미지

위와 같은 코딩입니다.
많은 조언 부탁드리겠습니다.

raymundo의 이미지

필요한 부분만 대충 손으로 옮겨적으셔서 그런지 컴파일에러까지 나는 코드라서... 이게 원래 잘못하신 건지 옮겨 적으면서 잘못하신 건지 구분을 할 수가 없네요.

오타라고 생각되는 부분($1 같은)은 생략하고

@AR1 = <RD_FILE1>;       # 패턴 목록 파일로부터 AR1 배열을 구성했는데
chomp @AR1;              # 패턴마다 죄다 "\n"이 끝에 붙어 있으니까, 이거 떼어내지 않으면 매치가 거의 안 되겠죠.
 
...
                $AR2[$j] =~ s/$AR1[$i]/ /g;   # e 플래그는 여기서는 불필요하니 제외
 
...
 
#         else {            이 else 구문 때문에 첫 라인이 매치가 안 되면 곧바로 안쪽 루프 빠져나가버리고 다음 패턴으로 진행하네요. 지워야 할 거고
#             last;
#         }

이렇게 수정하면 잘 돌아가는 듯 보이네요.

좋은 하루 되세요!

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.