PERL: БИБЛИОТЕКА ПРОГРАММИСТА



              

PERL: БИБЛИОТЕКА ПРОГРАММИСТА - стр. 189


Если разделители вам не нужны, но вы все равно хотите использовать круглые скобки, воспользуйтесь «несохраняющими» скобками в шаблоне вида /-\.(':Ch|Se|Ss)$/m.

Чтобы записи разделялись перед шаблоном, но шаблон включался в возвращае­мые записи, воспользуйтесь опережающей проверкой: /? (?=\. (9: Ch | Se | Ss)) /т. В этом случае каждый фрагмент будет начинаться со строки-разделителя.

Учтите, что для больших файлов такое решение потребует значительных рас­ходов памяти. Однако для современных компьютеров и типичных текстовых файлов эта проблема уже не так серьезна. Конечно, не стоит применять это реше­ние для 200-мегабайтного файла журнала, не располагая достаточным местом на диске для подкачки. Впрочем, даже при избытке виртуальной памяти ничего хо­рошего не выйдет.


6.8. Извлечение строк из определенного интервала

> Смотри также

Описание переменной $/ Bperlvar(l) и в главе 8; описание функции perlfunc(l).

6.8. Извлечение строк из определенного интервала

Требуется извлечь все строки, расположенные в определенном интервале. 0нтеР" вал может быть задан двумя шаблонами (начальным и конечным) или ноМеР0М первой и последней строки.

Часто встречающиеся примеры — чтение первых 10 строк файла (строки с 1 ^° ™> или основного текста почтового сообщения (все, что следует после пустой сТр0КИ)-

Решение

Используйте оператор .. или ... для шаблонов или номеров строк. В of-личие от .. оператор ... не возвращает истинное значение, если оба условия выг*олня" ются в одной строке.

while (<>)  {

if (/НАЧАЛЬНЫЙ ШАБЛОН/ .. /КОНЕЧНЫЙ ШАБЛОН/) { # Строка находится между начальным 9 и конечным шаблонами включительно.

while (о)  {

if ($НОМЕР_НАЧАЛЬНОЙ_СТРОКИ  .    $НОМЕР_КОНЕЧНОЙ_СТРОКИ)

# Строка находится между начальной

#   и конечной включительно.

Если первое условие оказывается истинным, оператор ... не проверяет второе условие.

while (<>) {

if (/НАЧАЛЬНЫЙ ШАБЛОН/ ...  /КОНЕЧНЫЙ ШАБЛОН/)  {

#   Строка находится между начальным




Содержание  Назад  Вперед