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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Замена символа Конца строки 
:(
    Опции темы
shamber
Дата 1.9.2008, 16:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Всем здравствуйте.

Возникла следующая проблемка.
мне неоходимо передавать hash, через STDIN.

как мы уже разобрались для этой задачи прекрасно Storable freeze и thaw

так вот возникла следующая проблема.
чтение данных происходит следующим образом 
Код

while( $line = <>  ) {
        if($line eq " \n"){
# значит конец передачи
        }else{
#записываем в буфер
push @buffer,$line;
        }
....


Данные я передаю таким образом, чтобы

$buffer->[0]   наименование команды;
$buffer->[1]  данные полученные  с помощью freeze;

Но если после преобразования с помощью freeze в строке будет содержаться символ перевода строки(надеюсь правильно его назвал \n) то  данные лягут также и в  $buffer->[2], чего-бы мне не хотелось.

вообщем я решил использовать такой фокус
перед отправкой заменять
Код

$data =~ s/\r?\n/#!#/g;


а при приеме назад восстанавливать.

Но проблема в том, что это почему-то не всегда срабатывает. В прикрепленом файле номер 1 содержится hash, записанный через store.
т.е.
Код

my $data = freeze $arg;
 store (\$data,'load');

Во втором файле находится находятся данные полученные с помощью
Код

my $data = freeze $arg;
 $data =~ s/\r?\n/#!#/g;
 store (\$data,'loads');

Как видно в обоих файлах есть перевод строки

Как доработать регулярку?

Это сообщение отредактировал(а) shamber - 1.9.2008, 16:43

Присоединённый файл ( Кол-во скачиваний: 3 )
Присоединённый файл  load 0,42 Kb
PM MAIL Jabber   Вверх
shamber
Дата 1.9.2008, 16:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Так и не понял как прикрепить второй файл в одно сообщение

Присоединённый файл ( Кол-во скачиваний: 3 )
Присоединённый файл  loads 0,43 Kb
PM MAIL Jabber   Вверх
ginnie
Дата 1.9.2008, 17:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 6.1.2008
Где: Москва

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



Уважаемый shamber, почему не вставить команду внутрь хэша?


--------------------
Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг)
PM MAIL Skype Jabber   Вверх
shamber
Дата 1.9.2008, 17:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Уважаемый ginnie,прошу прощения я не совсем понял ваш вопрос. Что вы имеете ввиду?

Это сообщение отредактировал(а) shamber - 1.9.2008, 17:48
PM MAIL Jabber   Вверх
ginnie
Дата 1.9.2008, 18:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 6.1.2008
Где: Москва

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



Я подумал, что лучше обойтись без замены символов конца строки, поэтому предложил поместить значение $buffer->[0] внутрь хэша. При этом читать данные из потока целиком. Похоже, что я был не прав, т.к. не учел, что могут передаваться несколько сериализованных хэшей.


--------------------
Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг)
PM MAIL Skype Jabber   Вверх
shamber
Дата 1.9.2008, 18:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



ginnie, я не могу уловить вашей идеи smile Не моглы бы Вы показать кодом, как понимать эту фразу

Цитата(ginnie @  1.9.2008,  18:01 Найти цитируемый пост)
поэтому предложил поместить значение $buffer->[0] внутрь хэша. При этом читать данные из потока целиком


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


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 6.1.2008
Где: Москва

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



До сериализации на стороне отправителя добавлять в хэш ключ c уникальным (для хэша) именем и значением, которое вы передаете перед сериализованным хэшем в Вашем варианте.

Это сообщение отредактировал(а) ginnie - 1.9.2008, 18:12


--------------------
Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг)
PM MAIL Skype Jabber   Вверх
Bulat
Дата 2.9.2008, 13:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


татарский Нео
***


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

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



shamber, что касается изменения регулярного выражения - два существенных вопроса,

как правило символ перевода каретки - \r, не присутствует в файлах созданных под никсовой платформой(под FreeBSD точно), т.е. в зависимости от операционной системы, нужно правильно обрезать символ конца строки.

И во-вторых, зачем между \r и \n знак вопроса??

Как правило, лично мне, для того чтобы убрать "конец строки" пока достаточно было лишь 
Код

s{[\r\n]}{}


В твоем случае, очевидно

Код

s{[\r\n]}{#!#}


smile



--------------------
менеджер по кодеврайтингу  smile 
PM MAIL WWW   Вверх
KSURi
Дата 2.9.2008, 22:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Bulat? как раз обеспечивает кросс-платформенность в данном случае (хотя еще лучше заменить \r и \n на \015 и \012 соответственно).
\r?\n можно прочитать как "один необязательный символ возврата каретки (ноль или один) и один символ перевода строки"

Это сообщение отредактировал(а) KSURi - 2.9.2008, 22:43


--------------------
Died at Life.pl line 21
PM Jabber   Вверх
shamber
Дата 3.9.2008, 09:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



KSURi, я правильно понял,что лучше 
Код

 s/\015?\012//g

PM MAIL Jabber   Вверх
KSURi
Дата 3.9.2008, 11:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Ага. Почитать про это можно здесь


--------------------
Died at Life.pl line 21
PM Jabber   Вверх
Bulat
Дата 3.9.2008, 14:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


татарский Нео
***


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

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



Цитата(KSURi @  2.9.2008,  22:41 Найти цитируемый пост)
Bulat, ? как раз обеспечивает кросс-платформенность в данном случае 

Это я потом понял, но сколько лично я не работал, мне всегда было достаточно [\r\n] smile


--------------------
менеджер по кодеврайтингу  smile 
PM MAIL WWW   Вверх
gcc
Дата 3.9.2008, 16:49 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


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

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



Код

's/\r$//' 


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


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

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


 




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


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

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