Сериализация

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Сериализация

Сообщение Владимир » 05.09.2010 14:42:37

Господа-граждане, всем доброго!
Впервые столкнулся с задачей сериализации/десериализации данных. В результате неких изысканий установил, что сериализация бывает типов "двоичная" и "XML". Вроде в дельфях есть встроенные механизмы для этого. Что в Lazarus'е есть для этого? Модуль DOT? Подскажите пож., куда копать?
Владимир
постоялец
 
Сообщения: 355
Зарегистрирован: 23.08.2007 19:48:39
Откуда: Москва

Re: Сериализация

Сообщение hinst » 05.09.2010 17:13:20

в лазарусе тоже есть. точнее, даже в FPC
Аватара пользователя
hinst
энтузиаст
 
Сообщения: 781
Зарегистрирован: 12.04.2008 18:32:38

Re: Сериализация

Сообщение Владимир » 06.09.2010 19:15:15

Доброго! Задача в целом состоит в следующем. Есть некий сайт инет-магазина, использует БД MySql. В числе прочего, есть таблица заказов, которую необходимо отслеживать удаленно с нескольких точек продаж. На точках имеется софт с MySqlСlient для удаленного доступа к БД. В таблице заказов имеется blob-поле с нужной информацией, реализованное как сериализованный массив. Ответ от службы поддержки по этому поводу был таким:
Да там обычной функцией php serialize сериализуется..
и deserialize к обратному виду приводится.
Вот чешу репу и думаю, как быть...
Владимир
постоялец
 
Сообщения: 355
Зарегистрирован: 23.08.2007 19:48:39
Откуда: Москва

Re: Сериализация

Сообщение hinst » 06.09.2010 19:42:05

пусть либо не используют php.serialize, а делают нормально.
либо раскапывать формат сериализации php, делать парсер для него
Аватара пользователя
hinst
энтузиаст
 
Сообщения: 781
Зарегистрирован: 12.04.2008 18:32:38

Re: Сериализация

Сообщение Odyssey » 06.09.2010 20:06:24

... либо переписывать вашу программу, которая отслеживает таблицу заказов, с Pascal на PHP, и использовать там php unserialize(). Но с учётом того, что вы спрашиваете на freepascal.ru, а не на каком-нибудь phpforum, можно пойти по второму из путей, предложенных hinst, т.е. раскопать формат сериализации php. Для начала можно сдёрнуть содержимое поля из базы как строку, сохранить в файл и изучить его в текстовом или hex-редакторе. Может быть, там всё очевидно.
Последний раз редактировалось Odyssey 07.09.2010 00:11:23, всего редактировалось 1 раз.
Odyssey
энтузиаст
 
Сообщения: 580
Зарегистрирован: 29.11.2007 17:32:24

Re: Сериализация

Сообщение Владимир » 06.09.2010 21:15:52

ну, советовать разработчикам, как писать код - это нонсенс, никому не понравится!
Понятно, попробую "сдернуть" содержимое в поток (и в файл), вдруг повезет? А если там бинарник? Грустно. У меня магазин на Lazarus достаточно крутой, хотелось по-легкому прикрутить его к сайту - дело-то благородное!
Владимир
постоялец
 
Сообщения: 355
Зарегистрирован: 23.08.2007 19:48:39
Откуда: Москва

Re: Сериализация

Сообщение hinst » 06.09.2010 21:32:14

я так понимаю, сервер отвечает на запросы клиента строкой, полученной в результате работы функции PHP serialize. Если я правильно понял, и это так... То вот это нонсэнс :shock: . Можете смело пояснить разработчикам, что так не делается, т.к. это абсолютно левый формат.
Аватара пользователя
hinst
энтузиаст
 
Сообщения: 781
Зарегистрирован: 12.04.2008 18:32:38

Re: Сериализация

Сообщение Nik » 06.09.2010 21:33:13

Понятно, попробую "сдернуть" содержимое в поток (и в файл), вдруг повезет? А если там бинарник?

Насколько я помню, serialize() возвращает особым образом оформленный текст с разделителями. Разобрать его на части из Lazarus вполне можно, хотя не факт, что просто.
Аватара пользователя
Nik
энтузиаст
 
Сообщения: 573
Зарегистрирован: 04.02.2006 00:08:09
Откуда: Киров

Re: Сериализация

Сообщение Владимир » 06.09.2010 21:44:29

hinst писал(а):я так понимаю, сервер отвечает на запросы клиента строкой, полученной в результате работы функции PHP serialize. Если я правильно понял, и это так... То вот это нонсэнс :shock: . Можете смело пояснить разработчикам, что так не делается, т.к. это абсолютно левый формат.


Насчет левого формата - вопрос. Они это считают стандартом - вместо того, чтобы добавлять поля в таблицу, запихивают в блоб массив...

Добавлено спустя 47 секунд:
Nik писал(а):
Понятно, попробую "сдернуть" содержимое в поток (и в файл), вдруг повезет? А если там бинарник?

Насколько я помню, serialize() возвращает особым образом оформленный текст с разделителями. Разобрать его на части из Lazarus вполне можно, хотя не факт, что просто.


Попробую. Отпишусь обязательно.

Добавлено спустя 2 минуты 29 секунд:
hinst писал(а):я так понимаю, сервер отвечает на запросы клиента строкой, полученной в результате работы функции PHP serialize. Если я правильно понял, и это так... То вот это нонсэнс :shock: . Можете смело пояснить разработчикам, что так не делается, т.к. это абсолютно левый формат.


Правильно понимаете. Только разработчикам пояснять что-то невместно! Пошлют.
Владимир
постоялец
 
Сообщения: 355
Зарегистрирован: 23.08.2007 19:48:39
Откуда: Москва

Re: Сериализация

Сообщение Владимир » 19.09.2010 17:51:19

По поводу сериализации.. Как и указывали уважаемые форумчане, не так страшен чорт, как его малюют. На поверку массив оказался текстом, оформленным в ряд блоков, разделенных символами { }. Стринговое значение указано как s:3:"num";s:1:"2" - т.е. переменная длиной 3 символа с именем "num" имеет значение длиной 1 символ "2". Интовое значение имеет формат i:300 без указания длины. Кому это надо и кто это выдержит - не берусь судить, но, говорят, что в PHP это чуть ли не стандартная функция и все ее пользуют...
Владимир
постоялец
 
Сообщения: 355
Зарегистрирован: 23.08.2007 19:48:39
Откуда: Москва

Re: Сериализация

Сообщение hinst » 19.09.2010 19:07:08

а что собственно в таком формате страшного? :shock:
Аватара пользователя
hinst
энтузиаст
 
Сообщения: 781
Зарегистрирован: 12.04.2008 18:32:38

Re: Сериализация

Сообщение Nik » 19.09.2010 21:44:08

Формат, может, и не самый красивый с точки зрения Pascal-программистов, но в PHP такая сериализация используется повсеместно (удобно именованные массивы записывать в БД одной строкой и обратно их дёргать).

Кстати, о птичках... Встречал как-то набор сторонних модулей, реализующих возможности именованных массивов в Delphi. Не встречал ли кто чего-нибудь похожего для Lazarus?
Аватара пользователя
Nik
энтузиаст
 
Сообщения: 573
Зарегистрирован: 04.02.2006 00:08:09
Откуда: Киров

Re: Сериализация

Сообщение Владимир » 20.09.2010 20:58:25

Nik писал(а):Формат, может, и не самый красивый с точки зрения Pascal-программистов, но в PHP такая сериализация используется повсеместно (удобно именованные массивы записывать в БД одной строкой и обратно их дёргать).

Кстати, о птичках... Встречал как-то набор сторонних модулей, реализующих возможности именованных массивов в Delphi. Не встречал ли кто чего-нибудь похожего для Lazarus?

Отправьте это г-ну hinst... Он оценит!
Владимир
постоялец
 
Сообщения: 355
Зарегистрирован: 23.08.2007 19:48:39
Откуда: Москва


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 48

Рейтинг@Mail.ru