![]() |
|
Модераторы: korob2001, ginnie |
![]()
|
|
| tolkien |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 277 Регистрация: 5.4.2008 Репутация: 4 Всего: 4 |
Проблема такая
$var = "строка\r\n" chomp $var; print $var; Вывод: строка\r Естественно мне надо чтобы вывод был строка без \r. Посмотрел документацию, в гугле. Выяснил что chomp убирает только то что есть в волшебной переменной $/. Потом \n оказывается может иметь разные коды в разных системах LF eq \012 eq \x0A eq \cJ eq chr(10) eq ASCII 10 CR eq \015 eq \x0D eq \cM eq chr(13) eq ASCII 13 | Unix | DOS | Mac | --------------------------- \n | LF | LF | CR | \r | CR | CR | LF | \n * | LF | CRLF | CR | \r * | CR | CR | LF | --------------------------- * text-mode STDIO Видно что это очень плохо. Так у меня вопрос какие есть пути решения проблемы. Пока я нашел только два способа 1. заменить chomp $var на $var =~ s/\s+$//; 2. преобразовать сами данные из "строка\r\n" в "строка\n" и дальше работать с chomp $var =~ s/\r\n$/\n/; Как еще можно решить данную проблему? |
|||
|
||||
| KSURi |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 887 Регистрация: 8.6.2006 Где: Russia Репутация: 20 Всего: 27 |
Честно говоря, не совсем понял проблему... Почему нельзя просто
-------------------- Died at Life.pl line 21 |
|||
|
||||
| nitr |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2543 Регистрация: 10.2.2006 Где: Россия :) Репутация: 37 Всего: 84 |
я обычно использовал s/\s+$//
Добавлено через 1 минуту и 35 секунд так же не понял вопроса Вы хотите знать, как использовать chomp или другие способы независимо от ОС? |
|||
|
||||
| GoDleSS |
|
||||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 105 Регистрация: 11.2.2007 Где: Пироговский Репутация: 2 Всего: 2 |
А
или
не поможет? Хотя на мой взгляд все же
вариант наиболее удобный. Это сообщение отредактировал(а) GoDleSS - 26.5.2008, 16:14 --------------------
It's a nice day to die my friend! |
||||||
|
|||||||
| ginnie |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 6.1.2008 Где: Москва Репутация: 38 Всего: 49 |
Уважаемый tolkien, судя по описанию chop(), использование chomp() более эффективно, по сравнению с s/[\r\n]+$// (как по скорости так и по памяти). Я вижу только один вариант использования chomp() - определяем разделитель строк для файла, сохраняем его в переменной $/, далее используем chomp().
GoDleSS,
не удалит \r в исходном вопросе.
может удалить последний значащий символ строки. -------------------- Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг) |
||||
|
|||||
| tolkien |
|
||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 277 Регистрация: 5.4.2008 Репутация: 4 Всего: 4 |
Строки приходят с разными разделителями одни с \n другие с \r\n. Т.е заранее неизвестно что это строка заканчивается \n, а слудующая будет заканчиватся \r\n. Это сообщение отредактировал(а) tolkien - 26.5.2008, 18:12 |
||||||
|
|||||||
| ginnie |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 6.1.2008 Где: Москва Репутация: 38 Всего: 49 |
tolkien, разделитель строк внутри файла должен быть одинаковым. Для Вашего некорректного файла используйте вариант s/[\r\n]+$//
-------------------- Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг) |
|||
|
||||
| tolkien |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 277 Регистрация: 5.4.2008 Репутация: 4 Всего: 4 |
Кто сказал что строки из файлов приходят? Они могут посети прийти через сокеты. Вобще о файлах речь не шла. Но меня посетила другая мысль. Вместо рег. выражения лучше написать собственную функцию chomp которая будет кушать все \n и \r\n.
|
|||
|
||||
![]()
|
| Правила форума "Perl" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Perl: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |