Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> А можно ли короче... управлять окончанием строки 
:(
    Опции темы
Danissimo
Дата 11.12.2006, 15:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 150
Регистрация: 14.8.2006
Где: Санкт-Петербург

Репутация: 1
Всего: 1



Мне нужно, чтобы окончание строки было именно CR, LF (13, 10) в независимости от платформы (nix, win). Я добиваюсь этого таким вот образом:
Код

my $str = "xxx\nyyy\nzzz";
$str =~ s{\10}{\13\10}g;
$str =~ s{\13\13\10}{\13\10}g;

Можно ли как-нть проще?
PM MAIL   Вверх
DiverD
Дата 11.12.2006, 16:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 225
Регистрация: 14.9.2005
Где: Белорусь

Репутация: 1
Всего: 2



Код

$str =~ s{\10}{\13\10}g;
$str =~ s{\13(\13\10)}{\$1}g;


LF - \012
CR - \015

Еще глянь perldoc Socket и IO::Socket
--------------------
[ FreeBSD & pERL p0WER eVERY dAY ]
PM MAIL   Вверх
Nab
Дата 11.12.2006, 16:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 582
Регистрация: 25.3.2006
Где: Kiev

Репутация: 26
Всего: 37



Код

$str =~ s/[^\13]\10/\13\10/g;



--------------------
 Чтобы правильно задать вопрос нужно знать больше половины ответа...
Perl Community 
FREESCO in Ukraine 
PM MAIL   Вверх
Danissimo
Дата 11.12.2006, 16:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 150
Регистрация: 14.8.2006
Где: Санкт-Петербург

Репутация: 1
Всего: 1



Nab, а чем отличается твой вариант от вот этого

$str =~ s/[^\015]\012/\015\012/g;

И второй вопрос: твой вариант, по идее, должен работать и вот с такой строкой

$str = "xxx\10yyy\10zzz";

да? Вот, какой результат получается:

xx\x0B\x08yy\x0B\x08zzz

Видимо, символ \10 все равно вопринимается как закодированный в 8-чной системе.

Так что не работает.

Добавлено @ 16:43 
2DiverD: Спасибо. Я, правда, сначала не понял, что ты хочешь сказать, пока Nab'у не ответил. Ты бы уж попонятнее выражался, тем более что правильные вещи говоришь.

Это сообщение отредактировал(а) Danissimo - 11.12.2006, 16:45
PM MAIL   Вверх
nitr
Дата 11.12.2006, 19:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2543
Регистрация: 10.2.2006
Где: Россия :)

Репутация: 37
Всего: 84



DanissimoDiverD
вы вообще про что говорили? smile)

Nab, очепятался smile \x10 \x13, а могли бы и исправить сами...
\x.. шестнадцатиричное представление smile
Код

#!perl
print "\x6C\x6F\x6C\x20\x3A\x29";



--------------------
PM   Вверх
Nab
Дата 11.12.2006, 20:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 582
Регистрация: 25.3.2006
Где: Kiev

Репутация: 26
Всего: 37



Вообщето, тут символы не так важны, посмотрите на тему топика и сам вопрос...


--------------------
 Чтобы правильно задать вопрос нужно знать больше половины ответа...
Perl Community 
FREESCO in Ukraine 
PM MAIL   Вверх
DiverD
Дата 11.12.2006, 22:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 225
Регистрация: 14.9.2005
Где: Белорусь

Репутация: 1
Всего: 2



ну сорри =)

а что \x10 \x13 тож самое что в 8миричной \012 \015 ?
--------------------
[ FreeBSD & pERL p0WER eVERY dAY ]
PM MAIL   Вверх
Danissimo
Дата 12.12.2006, 13:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 150
Регистрация: 14.8.2006
Где: Санкт-Петербург

Репутация: 1
Всего: 1



Цитата(nitr @ 11.12.2006,  19:43)
Nab, очепятался smile \x10 \x13, а могли бы и исправить сами... \x.. шестнадцатиричное представление smile

Хе-хе, эт я знаю, что \xYY -- 16-чное представление. Я вот тоже, как и Nab, думал, что можно использовать 10-чный коды. Более того, так, как ты, Nitr, предлагаешь, делать нельзя, ибо CR != \x13, так как CR == \x0D (про LF то же самое). И как, опять же, Nab верно заметил, символы тут не при чем. Вопрос -- в названии топика.
PM MAIL   Вверх
Danissimo
Дата 29.12.2006, 02:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 150
Регистрация: 14.8.2006
Где: Санкт-Петербург

Репутация: 1
Всего: 1



Придумал способ лучше =))
Код

s/(?<!\015)\012/\015\012/g;

И все! =))
PM MAIL   Вверх
amg
Дата 29.12.2006, 12:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1145
Регистрация: 3.8.2006
Где: Новосибирск

Репутация: 38
Всего: 50



Цитата(Danissimo @ 29.12.2006,  02:16)
Придумал способ лучше =))
Код

s/(?<!\015)\012/\015\012/g;

Да, это хороший вариант!
В три раза быстрее, чем классический 
Код

s/\r?\n/\r\n/g;

Хотя более сложный вариант ala Nab еще быстрее (в полтора раза)
Код

s/([^\r])\n/$1\r\n/g;

PM MAIL   Вверх
Danissimo
Дата 30.12.2006, 18:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 150
Регистрация: 14.8.2006
Где: Санкт-Петербург

Репутация: 1
Всего: 1



О! Правильно я понимаю, что фактическое значение \n зависит от ОС? Другими словами на win* \n = \x0A\x0D, а на *nix \n = \x0A?

Я заметил, что chomp по разному работает на *nix и на win*. В первом случае он ест последний \x0D, а во втором -- пару \x0A\x0D.

Я вибираю свой, так как он мне кажется лучшим с точки зрения понятности. Но это не мешает мне сказать спасибо, amg, за интересную аналитику.
PM MAIL   Вверх
Materium
Дата 31.12.2006, 13:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 127
Регистрация: 4.12.2006
Где: Питер

Репутация: нет
Всего: 2



Цитата(Danissimo @  30.12.2006,  18:33 Найти цитируемый пост)
О! Правильно я понимаю, что фактическое значение \n зависит от ОС? Другими словами на win* \n = \x0A\x0D, а на *nix \n = \x0A?


Естесно. ))) Иначе Perl не был бы таким хорошо переносимым по платформам языком.  smile 

--------------------
#!sub abc {return "ok"}${&abc()}="TMTOWTDI";print "$ok";
PM MAIL   Вверх
amg
Дата 3.1.2007, 13:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1145
Регистрация: 3.8.2006
Где: Новосибирск

Репутация: 38
Всего: 50



Цитата(Danissimo @  30.12.2006,  18:33 Найти цитируемый пост)
О! Правильно я понимаю, что фактическое значение \n зависит от ОС? Другими словами на win* \n = \x0A\x0D, а на *nix \n = \x0A?

Не совсем так. Насколько я понимаю, "\cJ""\012""\x0A"chr(10) и "\n" - синонимы и обозначают один символ, который перл интерпретирует как логический конец строки. А физическое воплощение этого конца строки может быть разным и зависит уже не от перла, а от строковой библиотеки ОС, драйвера терминала, сетевых драйверов и т.д. Почитать об этом можно в "Perl Cookbook", во Введении к 8-й главе.
PM MAIL   Вверх
ZeeLax
Дата 4.1.2007, 09:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 4388
Регистрация: 20.8.2006
Где: Алма-Ата

Репутация: нет
Всего: 88



Цитата(amg @  3.1.2007,  16:28 Найти цитируемый пост)
"\012", "\x0A", chr(10)

Вот насчёт этих - не знаю не знаю...


--------------------
Utility is when you have one telephone, luxury is when you have two, opulence is when you have three — and paradise is when you have none.
— Doug Larson
PM MAIL WWW ICQ Skype Jabber   Вверх
amg
Дата 4.1.2007, 10:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1145
Регистрация: 3.8.2006
Где: Новосибирск

Репутация: 38
Всего: 50



Цитата(ZeeLax @  4.1.2007,  09:53 Найти цитируемый пост)
Вот насчёт этих - не знаю не знаю...
Я не смог придумать ситуацию, когда бы эти записи означали не один и тот же символ. По крайней мере, при выводе на терминал и при записи в файл как в linux, так и в winNT - это синонимы.
Код

foreach ("\cJ", "\012", "\x0A", chr(10), "\n") {
  print 'some text'."$_";
}


Это сообщение отредактировал(а) amg - 4.1.2007, 10:30
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0863 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.