Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Общие вопросы > символ конца строки


Автор: shootnix 20.9.2006, 17:21
Здрастуйтэ. 
Возникла проблема определения конца строки - как это реализовано в Perl? Вот знаю что к примеру в Delphi точно что-то такое есть... а в Perl?

А вообще, вопрос не из философский побуждений задан - есть задача следующего характера:
Надо найти все данные (строку), помещённые между каким-то символом, стоящим строго в начале строки и строго в конце. Использование "\n" не совсем подходит, т.к. это, по сути, символ НОВОЙ строки, а мне нужно конец старой. 

Плиз хелп. Можно просто ссылку на доку какую-нить. Или сразу код ;)

Автор: trigger 20.9.2006, 17:30
дай мыло вышлю доку по регулярке в перл

или вот http://wmate.ru/ebooks/book19.html тока регица нада

Автор: Nab 20.9.2006, 19:08
$ - символ указывающий на конец строки ;)

Автор: amg 21.9.2006, 07:19
Цитата(shootnix @  20.9.2006,  17:21 Найти цитируемый пост)
символ конца строки есть такое в Perl?и вообще - есть такое?
Ну как такого может не быть в Perl'е, языке, для которого основная единица данных - именно строка.

Цитата
Надо найти все данные (строку), помещённые между каким-то символом, стоящим строго в начале строки и строго в конце.
Вариантов, как это сделать, очень много. Например исполнить команду
Код
perl -ne 's/^B(.*)E$/$1/ && print' file
Напечатается только те строки файла, которые начинаются с B и кончаются E (без самих B и E).

Цитата
Использование "\n" не совсем подходит, т.к. это, по сути, символ НОВОЙ строки, а мне нужно конец старой. 
Скорее все же наоборот. На "\n" заканчивается строка (если это не мультистрока).

Автор: shootnix 21.9.2006, 19:35
trigger, 
Цитата

или вот http://wmate.ru/ebooks/book19.html тока регица нада
 - спасибо, обязательно почитаю


Nab,
Цитата

 $ - символ указывающий на конец строки ;)

Аха... ток чтот не работает, может регулярка сложная аль ошиба... ещё попробую самостоятельно разобраться ... ну уж если что - к вам ;)


amg, 
Цитата

Напечатается только те строки файла, которые начинаются с B и кончаются E (без самих B и E).

Так ведь в этом и есть суть моего вопроса - Надо чтобы этим Е был признак конца строки - есть такое в Perl?? 

Цитата

Скорее все же наоборот. На "\n" заканчивается строка (если это не мультистрока).


Опять-таки не совсем верно -- "\n" - это признак перехода на другую строку а не конкретно признак конца данной строки. К примеру, если файл содержит только одну строку, то, скорее всего, в конце "\n" просто не будет. Попробуйте сами - напишите строку в файл без нажатя на Ентер и проверьте на наличиев этой строке признака "\n"

Добавлено @ 19:41 
Да, кстати, если не ошибаюсь, автор этой книги (http://wmate.ru/ebooks/book19.html ) - Perldoc smile А именно кто - уже не помню. Перевел Вадим Хомаха, кажется...

Автор: amg 22.9.2006, 08:40
Так, давайте по-порядку.
Был поставлена задача:
Цитата(shootnix @  20.9.2006,  17:21 Найти цитируемый пост)
...найти все данные (строку), помещённые между каким-то символом, стоящим строго в начале строки и строго в конце.
и предложено решение
Код

perl -ne 's/^B(.*)E$/$1/ && print' file
perl -lne 'chomp; s/^B(.*)E$/$1/ && print' file
Напечатается только те строки файла, которые начинаются с B и кончаются E (без самих B и E). (Второй вариант дает более красивую печать, если последняя строка заканчивается не на \n, а на EOF).
shootnix, чем не устраивает это решение?

Цитата(shootnix @  21.9.2006,  19:35 Найти цитируемый пост)
Так ведь в этом и есть суть моего вопроса - Надо чтобы этим Е был признак конца строки
Но это же уже другая задача! Т.е. надо только строки, кончающиеся \n ? (все строки, начинающиеся с определенного символа, кроме последней, если она заканчивается на EOF) ?

Приведите, пожалуйста, кусок своих данных, и то, что должно из них получиться, тогда будет понятнее.

Автор: shootnix 22.9.2006, 11:04
amg, ОК я, по-моему, уже сказал что надо - зачем разжигать дискуссии?
Итак, снова формулирую задачу:

Дано: текст такого плана:

Код

@ текст текст текст текст
@ текст текст текст текст
@ текст текст текст текст
@ текст текст текст текст


Надо:

    Вытащить этот текст после @ (символ условный - какая, в сущности, разница?) весь без остатка

Сопутствующие условия:

    Текст может содержать какие угодно символы: буквы, цифры и т.п.

В чем тогда проблема?

    Если использовать "\n" - последняя строка-таки не вытаскивается, т.к, "\n" - это символ перехода на новую строку а не конец данной.

Автор: Nab 22.9.2006, 11:16
А текст это вы из файла получаете, или откуда?
Потому как проблема эта может возникнуть только если у вас весь текст находиться в одной переменной, которую и нужно распарсить...

Автор: shootnix 22.9.2006, 11:30
из файла да -- текст парсю построчно так что разницы нет -- ладно раз логически не получается мыслить, давайте в лоб: как найти последний символ в строке? вот теперь этотсимвол будет "признаком конца строки" -- вот... тогда надо вырезать строку от символа "@", например (не включительно) и до этого последнего символа (включительно). 

Автор: amg 22.9.2006, 11:40
shootnix, проверьте, пожалуйста, (запустив из коммандной строки), что напечатает
Код

perl -lne "chomp; s/^@// && print" file


Добавлено @ 11:42 
Или нужен обязательно отдельный скрипт?

Добавлено @ 11:55 
Сейчас проверил в винде, последняя конструкция вроде работает, а за предыдущие приношу извинения: они в винде не работают из-за "неправильных" кавычек (http://forum.vingrad.ru/index.php?showtopic=113035)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)