请教,这段程序的BUG应该怎么改?

请教,这段程序的BUG应该怎么改?

小妹新写了一段Perl代码,功能是实现从一log中截取一段内容,该log格式如下:
...
...
12-Dec SUCESS
....
...
13-Dec SUCESS
....
...
14-Dec SUCESS
...
我的程序实现是:输入起始日期和截止日期例如12-Dec和13-Dec,则输出12-Dec SUCESS和13-Dec SUCESS之间的内容。代码如下:
my $skip =1;
while (<CACHE>) {
  chomp;

  if (!$skip) {
    if ( m/^$end_date\sSucess/ ) {
      $skip = 1;
    } else {
      next;
    }
  }

  if ( m/^$start_date\sSucess/ ) {
    $skip = 0;
    next;
  }
  print $_ . "\n";
}

实际运行时候发现有BUG,因为同一天的SUCESS标记可能会出现两次,如果出现这样的情况的话必须取第二次的SUCESS为准,这样上面的代码就不对了,我想在这个代码的基础上改,不知有什么好方法吗?谢谢!
占领小妹沙发



QUOTE:
原帖由 lacuskid 于 2008-12-29 14:19 发表
实际运行时候发现有BUG,因为同一天的SUCESS标记可能会出现两次,如果出现这样的情况的话必须取第二次的SUCESS为准,

那在碰到 start_date 的时候就不能直接开始打印了,而只能是先把后面的内容保存起来,这样到碰到后面的 start_date 的时候就可以把前面的内容丢弃,或者是碰到 end_date 的时候打印已保存的内容。
12-Dec SUCESS
....
12-Dec SUCESS
....
...
13-Dec SUCESS
...
13-Dec SUCESS
....
...
14-Dec SUCESS

这种情况要怎么取?


QUOTE:
原帖由 ly5066113 于 2008-12-29 14:55 发表
12-Dec SUCESS
....
12-Dec SUCESS
....
...
13-Dec SUCESS
...
13-Dec SUCESS
....
...
14-Dec SUCESS

这种情况要怎么取?

都是以第二次为准,就是输出第二个12-Dec SUCESS和第二个13-Dec SUCESS之间的内容,我试了一下保存第一个12-Dec SUCESS的内容,这样感觉有点混乱,而且不一定每天都是有两个SUCESS的,这只是少数情况。也不一定连续两天都是每天有两个SUCESS的,正常情况是一天一个。所以想在程序基础上稍微改一下,覆盖BUG的情况,还挺头疼的。。
log文件大不?
额,目前不算大,但是正在每天每天的增加中
可以考虑用散列,因为是后来的数据覆盖前面的数据。
流氓点的做法:

[Copy to clipboard] [ - ]
CODE:
undef $/;

while(<CACHE>)
{
        print $1 if /.*($start_date\sSucess.*$end_date\sSucess)/s;
}

sed -n "/$start_date\sSucess/,/$end_date\sSucess/p" youfile