Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Какой выбрать разделитель при передаче параметров

29K
05 сентября 2008 года
Mephala
7 / / 11.09.2007
Доброго всем дня!
Необходимо параметры функции записать в строку, а затем строку распарсить и выбрать оттуда все параметры (пишется провайдер между программами). Параметрами могут быть, как числа, дата и время, текст, так и массивы, ссылки и объекты.
Среда разработки - Delphi 7.
Какой лучше выбрать для этого разделитель? Точка с запятой, запятая, пробелы могут встретиться в тексте, ковычки - тоже не очень как-то.
Может кто-нибудь сталкивался с такой проблемой? Поделитесь, пожалуйста, опытом.
Спасибо!
6
05 сентября 2008 года
George
4.1K / / 05.01.2007
Используй слеш.
29K
05 сентября 2008 года
Mephala
7 / / 11.09.2007
Спасибо за ответ!
Тоже думала об этом, но в ссылках он тоже встречается, как и в текстах. К тому же в URL они еще и дублируются. Вообще, все символы могут встретиться, так как и бинарные данные тоже встречаются среди параметров. Вот и думаю, как это можно реализовать.
Что еще можете посоветовать?
6
05 сентября 2008 года
George
4.1K / / 05.01.2007
Ну так можно использовать комбинацию символов.
5
05 сентября 2008 года
hardcase
4.5K / / 09.08.2005
Цитата: Mephala
Параметрами могут быть, как числа, дата и время, текст, так и массивы, ссылки и объекты.

Почему бы не использовать XML.

2
05 сентября 2008 года
squirL
5.6K / / 13.08.2003
Цитата: Mephala
Доброго всем дня!
Необходимо параметры функции записать в строку, а затем строку распарсить и выбрать оттуда все параметры (пишется провайдер между программами). Параметрами могут быть, как числа, дата и время, текст, так и массивы, ссылки и объекты.
Среда разработки - Delphi 7.
Какой лучше выбрать для этого разделитель? Точка с запятой, запятая, пробелы могут встретиться в тексте, ковычки - тоже не очень как-то.
Может кто-нибудь сталкивался с такой проблемой? Поделитесь, пожалуйста, опытом.
Спасибо!


разделитель выбирайте любой. просто перед вставкой разделителя - пробегайте по строке и экранируйте то, что у вас является разделителем. например - двоеточия. потом, после разбора по разделителям - убирайте экранирующий символ.

14
05 сентября 2008 года
Phodopus
3.3K / / 19.06.2008
Сначала передается 4 байты длины последующего блока данным, потом сам блок, потом опять 4 байта длины и еще блок. И так пока очередные 4 байта длины не станут 0. Вот так очень обще идею изложил
1.9K
06 сентября 2008 года
andriano
474 / / 10.01.2008
В качестве разделителя обычно использую символ табуляции.
В принцие, конечно, желательно предусмотреть и обрабатывать ситуацию, когда разделитель встречается в тексте. Например, удваивать его при кодировании и совершеть обратное преобразование при декодировании.

Цитата:
Вообще, все символы могут встретиться, так как и бинарные данные тоже встречаются среди параметров.

Вообще-то размещать вперемешку текст и бинарные данные - нонсенс.
Обычно либо бинарные переводят в вид текста (форматное преобразование или UUE-кодирование), либо текст рассматривают как бинарные данные.
В любом случае для деления бинарных данных на порции используют не разделитель, а заголовок с указанием длины. Так что надо сперва определиться: текст или бинарные, и уже после этого применять соответствующий механизм.

29K
07 сентября 2008 года
Mephala
7 / / 11.09.2007
Спасибо большое за ответы.
Сама понимаю, что объединять текстовые и бинарные данные - нонсенс. Но по другому я не вижу как построить взаимодействие между модулями.
Суть такая, что из дельфовой программы нужно передать в хранимую процедуру СУБД (dll) входные параметры. А так как количество входных параметров может быть разным для разных функций, то было принято решение занести все параметры в один. Если у вас есть лучшее решение и пр., то буду рада любой критике :)

И еще вопрос: какие существуют классы, методы, объекты, чтобы парсить и формировать xml? С этим еще не сталкивалась. Буду рада помощи.

Может существуют уже готовые какие-то механизмы формирования строки и ее анализа?
Спасибо!
5
07 сентября 2008 года
hardcase
4.5K / / 09.08.2005
Цитата: Mephala
Суть такая, что из дельфовой программы нужно передать в хранимую процедуру СУБД (dll) входные параметры.

ADO с этим справляться умеет.

8
07 сентября 2008 года
mfender
3.5K / / 15.06.2005
можно сделать такой хитропопый ход в случае, если строки передаются: в первой строке передать некий набор случайных символов промеж фигурными скобками (это я к примеру). и дальше всё разделить именно этим набором, опять же промеж фигурными скобками. я так обычно поступаю, когда пишу макрос в Word'е для уничтожения лишних "переносов" и определения нужных абзацев.
1.9K
08 сентября 2008 года
andriano
474 / / 10.01.2008
Если речь идет о передаче произвольных жанных, то всегда существует вероятность встретить эту комбинацию внутри передаваемых данных (хотя и небольшая).
Т.е. ПРАВИЛЬНОЕ решение, все-таки, - при отсутствии заведомо неипользуемого символа делить данные на блоки и передавать вместе с заголовком, в котором указывается длина очередного блока.
29K
08 сентября 2008 года
Mephala
7 / / 11.09.2007
ADO у нас вообще использоваться не будет. Используются другие компоненты. К тому же схема работы с хранимыми процедурами несколько сложнее ввиду специфики клиента, чем то, что предлагает ADO.
Мне понравился подход с заголовками: проще реализовать и довольно легкий при передачи.
Большое всем спасибо за ответы! Особенно Аndriano :)
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог