2012-02-20 1 views
0

나는 플립 플롭 연산자를 사용하여 텍스트 구문 분석을하고있는 중이 야 내 데이터는 같은 아래에 보이는 :펄 플립 플롭 운영자 - 글로벌 주 이슈?

COMMAND START 

CELL 
123 

COUNTER1 COUNTER2 COUNTER3 
23   25   45 

COUNTER1 COUNTER2 COUNTER3 
22   34   52 

CELL 
234 

COUNTER1 COUNTER2 COUNTER3 
12   35   35 

END 

지금 내가이 데이터를 통해 각 셀에 대한 반복 COUNTER2의 합계를 찾을 필요가있다. 각 셀 아래에는 하나 이상의 COUNTER 행이있을 수 있습니다. 아래처럼 플립 플롭 연산자를 사용해 보았지만 작동하지 않습니다.

my ($CELL_ID_COL1, $TEMP_COUNT); 
my @line_contents; 

while (<>) { 
    chomp; 
    if(/^COMMAND.*START$/ .. /^END$/) { 

     if (my $e1 = /^CELL$/ ... (/^CELL$/ || /^END$/)) { 
      if ($e1 == 2) { 
       @line_contents = split(/\s+/, $_); #Split the line read on whitespaces 
       $CELL_ID_COL1 = $line_contents[0]; 
       print "$CELL_ID_COL1\n"; 
       $TEMP_COUNT = 0; 
      } 

      if (my $e2 = /^COUNTER1.*COUNTER3$/ ...(/^COUNTER1.*COUNTER3$/ || /^CELL$/ || /^END$/)) { 
       print "$_\n"; 
       if ($e2 ==2) { 
        @line_contents = split(/\s+/, $_); #Split the line read on whitespaces 
        $TEMP_COUNT += $line_contents[1]; 
       } 
       if ($e2 =~ /E0$/) { 
        redo; 
       } 

      } 
      if ($e1 =~ /E0$/) { 
       print "FINAL COUNT is: $TEMP_COUNT\n";    
       redo; 
      } 

     } 
    } 
} 

내가는이 question에서 논의 된 플립 플롭 운영자의 글로벌 상태로 뭔가를 할 수있어,하지만 훨씬 이해하지 못했습니다 생각합니다. 도와주세요.

미리 감사드립니다.

답변

5

플립 플롭이 없으면 더 쉽다고 생각합니다. 때로는 기능이 이동하는 방법이라고 생각하기 시작하지만 문제가 발생합니다. 대신 라운드 전체로 강제 때까지 기능 충실 싶은 충동에 저항, 그것은 "

use Data::Dumper; 
use List::Util qw(sum); 

my %cells; 
my $cell_id; 
my $started; 

while(<DATA>) { 
    $started++ if /COMMAND START/; 
    next unless $started; 
    next if /\A\s*\z/; 
    last if /END/; 

    if(/CELL/) { 
     chomp($cell_id = <DATA>); 
     $index = 0; 
     } 

    if(/COUNTER/) { 
     my @counters = (<DATA> =~ /([0-9]+)/g); 
     $cells{$cell_id}[$index++] = \@counters; 
     } 
    } 

my %sums; 
foreach my $cell_id (keys %cells) { 
    $sums{$cell_id} = sum map { $_->[1] } @{$cells{$cell_id}} 
    } 

print Dumper(\%cells, \%sums); 

당신은 또한 당신이 가서 합을 축적하기 위해 수정할 수 있습니다 할 수있는 완전히 다른 방법을 고려한다.

여전히 플립 플롭을 사용하려면

그러나, 당신은 도움을 Respect the global state of the flip flop operatorMake exclusive flip-flop operators

+0

안녕 브라이언, 고마워를 읽을 수 있습니다. 당신은 내가 내 코드 샘플에 직면 문제가 있기 때문에 인 경우 확인하십시오 수 '플립 플롭 운영자의 전역 상태'문제 만? 감사합니다 – pkr13

+0

코드가 작동하지 않는 이유를 모르겠습니다. 나는 오류를 추적하기 위해 시간을 보내고 싶지 않았습니다. –