Чтение блоков текста в Perl - PullRequest
0 голосов
/ 02 ноября 2010

Я пытаюсь разбить страницу текста на блоки на основе начальной и конечной строки.Я видел сообщение о том, как это сделать, но по какой-то причине (возможно, что-то не так между клавиатурой и стулом) я не получаю никаких возвращаемых строк.*

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 Ответ

2 голосов
/ 02 ноября 2010

В первой строке вы видите проблему порядка операций (а также использование глобального дескриптора файла, а не локальной лексики).Измените эти операторы на:

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/;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...