Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Какой выбрать разделитель при передаче параметров
Форум программистов > Системное программирование > Delphi и Pascal > Delphi - FAQ
Mephala
Доброго всем дня!
Необходимо параметры функции записать в строку, а затем строку распарсить и выбрать оттуда все параметры (пишется провайдер между программами). Параметрами могут быть, как числа, дата и время, текст, так и массивы, ссылки и объекты.
Среда разработки - Delphi 7.
Какой лучше выбрать для этого разделитель? Точка с запятой, запятая, пробелы могут встретиться в тексте, ковычки - тоже не очень как-то.
Может кто-нибудь сталкивался с такой проблемой? Поделитесь, пожалуйста, опытом.
Спасибо!
Morpheus
"<!@#>" или "</!@#>" - вот и разделитель
sax_ol
Цитата(Mephala @ 5:09:2008 - 08:42) *
пишется провайдер между программами
И что он будет провайдить?
slavon-x86
Сделай с размером !
Т.е. в начале идёт число, которое обозначает число байт данных для параметра которые нужно читать.

К примеру:
16 Я уехал в африку9 Синий кот7 Тетрадь
sax_ol
Цитата(slavon-x86 @ 5:09:2008 - 14:02) *
16 Я уехал в африку9 Синий кот7 Тетрадь
Ой не спроста все это smile.gif
Kmet
велосипедисты... чем XML не угодил?
sax_ol
Kmet Дык, я спросил про "кухню", в подполье ушли ....
zubr
Согласен с Kmet - xml самый лучший вариант. Но если все же идти путем разделителя, то самый надежный вариант, применяемый во многих протоколах - это любой символ. Если он встречается в тексте, то удваивается. При парсинге строки пара этих символа преобразуются в один и относятся к тексту, оставшийся к разделителю.
Mephala
Спасибо большое за ответы. Получается, что одни из лучших - это xml и удвоение символа. А если будут еще передаваться и бинарные данные в строку, то какой из этих лучше использовать?
Сама понимаю, что от велосипедов не деться. Суть такая, что из дельфовой программы нужно передать в хранимую процедуру СУБД (dll) входные параметры. А так как количество входных параметров может быть разным для разных функций, то было принято решение занести все параметры в один. Если у вас есть лучшее решение и пр., то буду рада любой критике smile.gif

И еще вопрос: какие существуют классы, методы, объекты, чтобы парсить и формировать xml? С этим еще не сталкивалась я. Буду рада помощи.
Спасибо!
sax_ol
Цитата(Mephala @ 7:09:2008 - 10:12) *
уть такая, что из дельфовой программы нужно передать в хранимую процедуру СУБД (dll) входные параметры.
Вот тут надо поконкретнее ... у вас ХП в длл? или что? Да и саму СУБД неплохобы указать.
Mephala
СУБД - Advantage SQL.
Да, создали одну ХП в длл для универсальности. Эта процедура обрабатывает один входной параметр, разбивает его на массив параметров и передает уже эти параметры нужной внутренней хранимой процедуре СУБД (Advantage SQL). Поэтому и была написана одна универсальная хранимая процедура (ДЛЛ), которая смогла бы обрабатывать множество других процедур и функций, чтобы не клепать множество идентичных самописных длл. Поэтому и было принято решение все параметры засунуть в один. Это легче при интеграции, масштабировании, развертывании и по производительности.
Что скажете?
Есть вариант формирования строки по схеме - длина 1 параметра - первый параметр - длина 2 параметра - второй параметр и т.д. Такой подход мне кажется производительным - только один цикл для строки. Для удвоения - нужно будет несколько циклов, и для xml тоже будет трудоемкий процесс.
Или может еще что-то. Как вы считаете?
sax_ol
Что-то не совсем понимаю, зачем все эти выкрутасы .... и не понимаю при вашем (хотя он уже и не совсем ваш, в инете много ваших вопросов по форумам) варианте, как узнавать будете что 1 параметр к примеру не 3-ий и не 5-ый? В идеале надо бы еще знать что есть что. А если у вас это все строго определено, то нафик все эти движения с "универсальностью", если в итоге никакой универсальности нет? Или я чегото не допонимаю, или ... ну впрочем помошников у вас много ... smile.gif
Kmet
что вы понимаете под длл?

Цитата(Mephala @ 8:09:2008 - 10:13) *
Есть вариант формирования строки по схеме - длина 1 параметра - первый параметр - длина 2 параметра - второй параметр и т.д. Такой подход мне кажется производительным - только один цикл для строки.

багадром... не очевидно как передавать числа, даты и тд

Цитата(zubr @ 6:09:2008 - 14:06) *
Но если все же идти путем разделителя, то самый надежный вариант, применяемый во многих протоколах - это любой символ. Если он встречается в тексте, то удваивается.

имхо, идеальный вариант если не надо сохронять информацию о типе.

согласен с sax_ol, непонятно какие мотивы вас сподвигли на такое неоднозное решение. БД с множеством ХП, которые обеспечат проверку типов, много лучше вашего решения.
Mephala
Мотивы такие оказались из сложности самой платформы, на котором все работает уже много-много лет. А вот сейчас хочется это все переместить на новый движок на новую СУБД с совместимостью с прошлыми наработками. Другие варианты, как не рассматривали - не подошли. А из-за того что я только часть проекта осветила, а 95% - нет, вот и появляется уверенность, что это очередной велосипед и багадром... smile.gif
Вы правы, как никогда smile.gif Без этого ни одни проект не создается.
>не очевидно как передавать числа, даты и тд
Как строку. Есть же функции для преобразования типов. С этим как раз проблем не будет.
И БД с множеством ХП как раз и будет. И мой провайдер тоже будет использоваться для конкретных задач.
Спасибо большое всем за отклик!
Kmet
Цитата(Mephala @ 9:09:2008 - 09:51) *
Мотивы такие оказались из сложности самой платформы, на котором все работает уже много-много лет. А вот сейчас хочется это все переместить на новый движок на новую СУБД с совместимостью с прошлыми наработками. Другие варианты, как не рассматривали - не подошли. А из-за того что я только часть проекта осветила, а 95% - нет, вот и появляется уверенность, что это очередной велосипед и багадром... smile.gif

уверенность осталась
Цитата(Mephala @ 9:09:2008 - 09:51) *
>не очевидно как передавать числа, даты и тд
Как строку. Есть же функции для преобразования типов. С этим как раз проблем не будет.

будут. как будете разруливать случай, когда передоваемый параметр после преобразования в строку будет начинаться с цифры?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2008 IPS, Inc.