Forum Webscript.Ru

Программирование => Perl => Тема начата: DamonLSD от 22 Мая 2003, 15:52:43

Название: "выдирание" текста из файла
Отправлено: DamonLSD от 22 Мая 2003, 15:52:43
Привет, всезнающий All!
Возникла необходимость выбрать из одного файла некоторые строки и сохранить их в другом. С "выдиранием", например, заголовков новостей тут нет проблемм - это я умею ;) а вот вырезать диапазон строк, тут у меня фантазии не хватило.
Задача такова: необходимо выбрать кусок из файла со строки, в которой встречается слово "ХХХ" и до строки в которой есть .
Смысл собственно вот в чем: есть ТВ-программа на всю неделю, в которой много каналов. Мне нужно выбрать, например, ОРТ на всю неделю и сохранить в отдельном файле.
Ну вот и все. Кажися объяснил суть дела.
Спасибо.
Название: "выдирание" текста из файла
Отправлено: DamonLSD от 22 Мая 2003, 15:54:54
Да, кстати, могу скинуть html\'ку с этой ТВ-программой
Название: "выдирание" текста из файла
Отправлено: Phoinix от 22 Мая 2003, 16:01:02
Самое простое...

foreach (@text) {
  if (m/XXX/) {$i = "1";}
  if (m/<\\/td>/) {$i = "0";}
  if ($i eq "1") {@sometext = (@sometext, $_);}
}

P.S. исправил...
Название: "выдирание" текста из файла
Отправлено: NeoNox от 22 Мая 2003, 16:32:53
Цитировать
Phoinix:
if ($i eq 1) {@sometext = (@sometext, $_;}

Что это? Если даете ответ то потрудитесь его проверить.
Особенно "$i eq 1"... Операторы сравнения повторите...
Название: "выдирание" текста из файла
Отправлено: NeoNox от 22 Мая 2003, 17:03:38
DamonLSD
Начни с
$text =~ m/XXX(.*?)<\\/td>/i;
my $new_tex = $1;
а далее perldoc perlre; или поиск по этому форуму.
Название: "выдирание" текста из файла
Отправлено: DamonLSD от 22 Мая 2003, 17:32:25
Спасибо большое за наставления!
Буду копать дальше
Название: "выдирание" текста из файла
Отправлено: Phoinix от 22 Мая 2003, 17:55:39
NeoNox
Упс.. сорри не заметил... в следующий раз буду аккуратней...

P.S. но смысл, то вообщем понятен...
Название: "выдирание" текста из файла
Отправлено: Glader от 26 Мая 2003, 10:02:00
Цитировать
NeoNox:
Начни с
$text =~ m/XXX(.*?)<\\/td>/i;
my $new_tex = $1;
а далее perldoc perlre; или поиск по этому форуму.

А там не нужно ли сделать
m/XXX((.|\\n)*?)<\\/td>/i;  ?
он что-то говорил про многострочность...
Название: "выдирание" текста из файла
Отправлено: Alone от 26 Мая 2003, 11:32:19
Цитировать
Glader:
А там не нужно ли сделать
m/XXX((.|\\n)*?)<\\/td>/i; ?
он что-то говорил про многострочность...

проще так наверно
$text =~ m/XXX(.*?)<\\/td>/is;
Название: "выдирание" текста из файла
Отправлено: Glader от 26 Мая 2003, 12:53:34
TIMTOWTDI  :)
Название: "выдирание" текста из файла
Отправлено: Alone от 26 Мая 2003, 13:21:18
Цитировать
Glader:
TIMTOWTDI

:confused:
Название: "выдирание" текста из файла
Отправлено: arto от 26 Мая 2003, 20:32:34
while () { print if (/XXX/../<\\/td>/); }
Название: "выдирание" текста из файла
Отправлено: NeoNox от 27 Мая 2003, 10:56:39
Alone There Is More Than One Way To Do It
Название: "выдирание" текста из файла
Отправлено: Glader от 03 Июня 2003, 09:49:19
Цитировать
while ( ) { print if (/XXX/../<\\/td>/); }


Ух ты, а это что значит?

такое

for (qw(asd123asz as1d987asd asd5436533asz);) {
      print $_."\\n" if (/asd/../asz/);
}

не сработало
Название: "выдирание" текста из файла
Отправлено: mike от 03 Июня 2003, 14:03:52
perldoc perlop
и там - Range operators
Название: "выдирание" текста из файла
Отправлено: Alex V. White от 06 Июня 2003, 17:39:41
А вот если ситуация такая:
вытягиваю всю страницу при помощи

#!/usr/bin/perl

use LWP::Simple qw(get);
use CGI qw(:all);

my $url="http://www.osta-bremen.de/ecottonflash.htm";
my $cache="futures.txt";

print header;

#if ((-M $cache) > .04) {
my $doc=get($url);

open(CF, ">$cache") || die "ERROR";
print CF $doc;
close(CF);
#}

после этого вся страница находится в переменной $doc.
Дальше мне надо вытянуть таблицу, которая находится между:

это все в одну строку
и:

 

и потом эту таблицу напечатать:
print "

$doc
";
КАК ЕЕ ВЫТЯНУТЬ ЦЕЛИКОМ? В ней очень много строк.
Название: "выдирание" текста из файла
Отправлено: NeoNox от 06 Июня 2003, 18:12:21
Пробуй:
$doc =~ s!(.*?)(.*?)(

.*?)!$2!i;

Название: "выдирание" текста из файла
Отправлено: Alex V. White от 06 Июня 2003, 18:33:15
Спасибо!
Уже вышло.
Буду форматировать.