The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Как прочесть в многострочнике содержимое между тегами"
Вариант для распечатки  
Пред. тема | След. тема 
Форум WEB технологии (Perl)
Изначальное сообщение [ Отслеживать ]

"Как прочесть в многострочнике содержимое между тегами"  +/
Сообщение от ЦапЦарапыч (ok) on 25-Ноя-13, 08:40 
Имеем файл, его содержимое в многостроку

<dia>
bla
bla
</dia>

нужно получить содержимое между <dia></dia>

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Как прочесть в многострочнике содержимое между тегами"  –1 +/
Сообщение от Pahanivo (ok) on 25-Ноя-13, 10:03 
> Имеем файл, его содержимое в многостроку
> <dia>
> bla
> bla
> </dia>
> нужно получить содержимое между <dia></dia>

Варианты:
1) Самый простой - перефокусировать зрение, так ак инструмент не указан

2) Читать в цикле файл, проверять совпадение подстрок, выводить требуемый строки между требуемыми подстроками.

3) Изичить скажем регекспы перла, и написать простенький в одну строку регексп

4) Изучить модуль разбора XML - написать крипт с использованием этого модуля.

5) Взять любой текстовый редактор и используя поиск и копипаст извлечь нужное содержимое

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "Как прочесть в многострочнике содержимое между тегами"  +/
Сообщение от ЦапЦарапыч (ok) on 25-Ноя-13, 10:14 
Мега полезные рекомендации конечно, а главное сколько полезной и нужной инофрмации вы преподнесли.
У меня к вам одна только просьба, не пишите большой такой ерунды.
Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

3. "Как прочесть в многострочнике содержимое между тегами"  +/
Сообщение от pavel_simple (ok) on 25-Ноя-13, 10:30 
>> Имеем файл, его содержимое в многостроку
>> <dia>
>> bla
>> bla
>> </dia>
>> нужно получить содержимое между <dia></dia>
> Варианты:
> 1) Самый простой - перефокусировать зрение, так ак инструмент не указан

не уверен, но тэг perl проставлен -- может вопрошающий этот инструмент имел ...

> 2) Читать в цикле файл, проверять совпадение подстрок, выводить требуемый строки между
> требуемыми подстроками.
> 3) Изичить скажем регекспы перла, и написать простенький в одну строку регексп
> 4) Изучить модуль разбора XML - написать крипт с использованием этого модуля.
> 5) Взять любой текстовый редактор и используя поиск и копипаст извлечь нужное
> содержимое

Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

4. "Как прочесть в многострочнике содержимое между тегами"  +/
Сообщение от ЦапЦарапыч (ok) on 25-Ноя-13, 10:31 
Все верно уважемый.


Ответить | Правка | ^ к родителю #3 | Наверх | Cообщить модератору

5. "Как прочесть в многострочнике содержимое между тегами"  +1 +/
Сообщение от Pahanivo (ok) on 25-Ноя-13, 11:15 
> Все верно уважемый.

каюсь, прошу простить, затролил не приглядевшись ))
примите скрипт в качестве подношения ))

#!/usr/bin/perl -w
use strict;
$/ = undef;
open(MYFILE, "tmp2_emacs");
my $file = <MYFILE>;
close MYFILE;
$/ = "\n";
print "||$1||\n" while ($file =~ m!<bla>(.*?)<\/bla>!sg);

Ответить | Правка | ^ к родителю #4 | Наверх | Cообщить модератору

6. "Как прочесть в многострочнике содержимое между тегами"  +/
Сообщение от pavel_simple (ok) on 25-Ноя-13, 11:18 
>[оверквотинг удален]
> каюсь, прошу простить, затролил не приглядевшись ))
> примите скрипт в качестве подношения ))
> #!/usr/bin/perl -w
> use strict;
> $/ = undef;
> open(MYFILE, "tmp2_emacs");
> my $file = <MYFILE>;
> close MYFILE;
> $/ = "\n";
> print "||$1||\n" while ($file =~ m!<bla>(.*?)<\/bla>!sg);

да, я сразу тожа не разглядел

Ответить | Правка | ^ к родителю #5 | Наверх | Cообщить модератору

7. "Как прочесть в многострочнике содержимое между тегами"  +/
Сообщение от ЦапЦарапыч (ok) on 25-Ноя-13, 11:23 
Дело в том что я уже делал нечто похожее, и оно не работает.

$file = 'a_utf-8.lml';
open(F,"< $file");
@data = <F>;
close(F);

$cc = '0';
while ( $#data> $cc){
print $data[$cc]=~m/<dia>(.*?)<\/dia>/imsg;
$cc++;
}

Ответить | Правка | ^ к родителю #6 | Наверх | Cообщить модератору

9. "Как прочесть в многострочнике содержимое между тегами"  +/
Сообщение от Pahanivo (ok) on 25-Ноя-13, 11:34 
> Дело в том что я уже делал нечто похожее, и оно не
> работает.
> $file = 'a_utf-8.lml';

название файла какбэ намекает .... что надо убедит  в обоснованности названия, а затем погуглить на тему perl+utf8
> open(F,"< $file");

нахера массив????? как потом искать многосрок?
> @data = <F>;
> close(F);
> $cc = '0';
> while ( $#data> $cc){
> print $data[$cc]=~m/<dia>(.*?)<\/dia>/imsg;

естественно нихера не будет искать когда у вас строки в разных элементах
> $cc++;
> }

мой скрипт проверен, и работает, каждая строка имеет смысл, возможно лишь проблема с utf8

Ответить | Правка | ^ к родителю #7 | Наверх | Cообщить модератору

11. "Как прочесть в многострочнике содержимое между тегами"  +/
Сообщение от ЦапЦарапыч (ok) on 25-Ноя-13, 11:37 
>[оверквотинг удален]
>> @data = <F>;
>> close(F);
>> $cc = '0';
>> while ( $#data> $cc){
>> print $data[$cc]=~m/<dia>(.*?)<\/dia>/imsg;
> естественно нихера не будет искать когда у вас строки в разных элементах
>> $cc++;
>> }
> мой скрипт проверен, и работает, каждая строка имеет смысл, возможно лишь проблема
> с utf8

Не не, дело не в utf-8
Просто я изначально не верно подошел к решению (тупанул), тут как бы масив построчно перебирается и понятное дело многостроки не словит.

Ответить | Правка | ^ к родителю #9 | Наверх | Cообщить модератору

10. "Как прочесть в многострочнике содержимое между тегами"  +/
Сообщение от Etch on 25-Ноя-13, 11:35 
echo '123<dia>
bla
bla
</dia>123' | perl -e 'my $mstr; while (my $str = <>) {$mstr.=$str;}; $mstr=~m@^.*?<dia>(.*?)</dia>@s; print $1;'
Ответить | Правка | ^ к родителю #7 | Наверх | Cообщить модератору

8. "Как прочесть в многострочнике содержимое между тегами"  +/
Сообщение от ЦапЦарапыч (ok) on 25-Ноя-13, 11:33 
>[оверквотинг удален]
> каюсь, прошу простить, затролил не приглядевшись ))
> примите скрипт в качестве подношения ))
> #!/usr/bin/perl -w
> use strict;
> $/ = undef;
> open(MYFILE, "tmp2_emacs");
> my $file = <MYFILE>;
> close MYFILE;
> $/ = "\n";
> print "||$1||\n" while ($file =~ m!<bla>(.*?)<\/bla>!sg);

Спасибо за рецепт, сработало.
Вы прощенны )))

Ответить | Правка | ^ к родителю #5 | Наверх | Cообщить модератору

13. "Как прочесть в многострочнике содержимое между тегами"  +/
Сообщение от ACCA (ok) on 26-Ноя-13, 04:05 
> $/ = undef;
> open(MYFILE, "tmp2_emacs");
> my $file = <MYFILE>;
> close MYFILE;
> $/ = "\n";

Хорошая идея. Это не ты спрашивал, что такое "Out of memory: Kill process 12866 httpd score 883 or sacrifice child" ?

Давай попробуем не так бессмысленно и менее беспощадно к PerlIO:


while(<>) {
   if (m!<dia>!o .. m!</dia>!o) {
      if (m!<dia>(.+)|(.+)</dia>!o) {
          print "$1\n";
      } else {
          print $_;
      }
   }
}

Ответить | Правка | ^ к родителю #5 | Наверх | Cообщить модератору

14. "Как прочесть в многострочнике содержимое между тегами"  +/
Сообщение от Pahanivo (ok) on 26-Ноя-13, 07:51 
> Давай попробуем не так бессмысленно и менее беспощадно к PerlIO:

а собственно в чем бессмысленность и беспощадность? )

Ответить | Правка | ^ к родителю #13 | Наверх | Cообщить модератору

15. "Как прочесть в многострочнике содержимое между тегами"  +/
Сообщение от ACCA (ok) on 26-Ноя-13, 11:30 
>> Давай попробуем не так бессмысленно и менее беспощадно к PerlIO:
> а собственно в чем бессмысленность и беспощадность? )

    1. my $file = <MYFILE>;
Ничего, что файл может оказаться потоком на пару петабайт?


    2. $/ = "\n";
При включеном, например, :crlf?


Разумеется, в случае <dia> задача упрощается. Но это не повод разводить винрарный бардак.


Мораль сей басни достаточно кратка - ".." a.k.a. "..." В оправдание менторского тона замечу, что сам удивился наличию flip-flop. Perl следует курить до просветления.

Ответить | Правка | ^ к родителю #14 | Наверх | Cообщить модератору

16. "Как прочесть в многострочнике содержимое между тегами"  +/
Сообщение от Pahanivo (ok) on 26-Ноя-13, 12:21 
>>> Давай попробуем не так бессмысленно и менее беспощадно к PerlIO:
>> а собственно в чем бессмысленность и беспощадность? )
>     1. my $file = <MYFILE>;
> Ничего, что файл может оказаться потоком на пару петабайт?

Первые два слова в топе "Имеем файл". К тому же формат XML like ...
Уважаемый, вам уже мерещаться потоки )) Надо отдыхать.

>     2. $/ = "\n";
> При включеном, например, :crlf?

И? Заранее то это известно ))

> Разумеется, в случае <dia> задача упрощается. Но это не повод разводить винрарный
> бардак.

Родной, какой бардак - задачу уже решили )) бардака нет.

> Мораль сей басни достаточно кратка - ".." a.k.a. "..." В оправдание менторского
> тона замечу, что сам удивился наличию flip-flop. Perl следует курить до
> просветления.

Эко накрыло торарисча ...

Ответить | Правка | ^ к родителю #15 | Наверх | Cообщить модератору

17. "Как прочесть в многострочнике содержимое между тегами"  +/
Сообщение от pavel_simple (ok) on 26-Ноя-13, 12:32 
>[оверквотинг удален]
>>     2. $/ = "\n";
>> При включеном, например, :crlf?
> И? Заранее то это известно ))
>> Разумеется, в случае <dia> задача упрощается. Но это не повод разводить винрарный
>> бардак.
> Родной, какой бардак - задачу уже решили )) бардака нет.
>> Мораль сей басни достаточно кратка - ".." a.k.a. "..." В оправдание менторского
>> тона замечу, что сам удивился наличию flip-flop. Perl следует курить до
>> просветления.
> Эко накрыло торарисча ...

ну что вы как маленькие спорите -- у вас кулаков поговорить нет чтоли.

задача решена -- идиала никто не скал, да его и не требовалось.

Ответить | Правка | ^ к родителю #16 | Наверх | Cообщить модератору

18. "Как прочесть в многострочнике содержимое между тегами"  +/
Сообщение от михалыч (ok) on 26-Ноя-13, 13:03 
> ну что вы как маленькие спорите -- у вас кулаков поговорить нет чтоли.

Действительно, что у вас, рук нету? ))

> идиала никто не скал

Но стремиться к нему надо?!

2АССА
из 13 поста у меня не заработало ((
вот так да: while(<>){print if !/dia/}
ну и в однострочнике из командной строки пришлось заслешивать !
perl -e 'while(<>){print if \!/dia/}' file (нет пределов совершенству!?)

Но ведь с этими <dia> это частный случай, вырезания текста между тегами в HTML.
Ниже в общем виде.

Ответить | Правка | ^ к родителю #17 | Наверх | Cообщить модератору

12. "Как прочесть в многострочнике содержимое между тегами"  +/
Сообщение от михалыч (ok) on 25-Ноя-13, 13:39 
> Имеем файл, его содержимое в многостроку
> <dia>
> bla
> bla
> </dia>
> нужно получить содержимое между <dia></dia>

Раз пошла такая пьянка..
cat file | perl -pe 's/<.*?>//g;s/^\s+//'
cat file | perl -pe 's/<[^>]*>//g;s/^\s+//'

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру