在perl中读取文本块

时间:2010-11-01 21:45:29

标签: perl

我正在尝试根据开始和结束字符串将文本页面分成块。我看到了关于如何做到这一点的帖子,但由于某种原因(keybd和主席之间可能有问题),我没有得到任何返回的行。

这是我到目前为止:

open INPUT, "in.file" || die "Can't find file\n";
open OUT, ">log.out" || die "Can't opne file\n";


$start="\/\*";
$stop= "\/\=";
$found=0;

while (<INPUT>) 
 {
 if (/$start/ .. /$stop/) 
  {
  next if /$start/ || /$stop/;
  if ($found == 0)
   {
   print "NOT FOUND\n";
   }
  else
   {
   print "FOUND\n";
   }
  }
 }

我们将此作为我正在阅读的内容的一个例子:

/ *批处理1 - abc ... .. 。 / =

/ *批处理2 - jkl ... .. 。 / =

/ *批处理3 - xyz ... .. 。 / =

在有人评论之前,是的,我是一般的编程新手,所以在这里为简单的错误道歉。我确实上线并检查样品,但无济于事。如果这是一个基本问题,再次道歉。

1 个答案:

答案 0 :(得分:2)

您在第一行中有一个操作顺序问题(以及使用全局文件句柄而不是本地词法)。将这些陈述改为:

use strict;
use warnings;
open my $input, 'in.file' or die "Can't find file\n";
open my $out, '>', 'log.out' or die "Can't open file\n";

此外,您正在检查$found变量,但从未设置它(不要忘记在每次循环迭代的顶部再次清除它)。

否则,您的代码看起来没问题,尽管您可以简化您的正则表达式以提高可读性:

my $start = '/*';
my $end = '/=';

# ... and inside the loop:
$found = 1 if /\Q$start\E/ .. /\Q$stop\E/;