Какой выбрать разделитель при передаче параметров
Необходимо параметры функции записать в строку, а затем строку распарсить и выбрать оттуда все параметры (пишется провайдер между программами). Параметрами могут быть, как числа, дата и время, текст, так и массивы, ссылки и объекты.
Среда разработки - Delphi 7.
Какой лучше выбрать для этого разделитель? Точка с запятой, запятая, пробелы могут встретиться в тексте, ковычки - тоже не очень как-то.
Может кто-нибудь сталкивался с такой проблемой? Поделитесь, пожалуйста, опытом.
Спасибо!
Используй слеш.
Тоже думала об этом, но в ссылках он тоже встречается, как и в текстах. К тому же в URL они еще и дублируются. Вообще, все символы могут встретиться, так как и бинарные данные тоже встречаются среди параметров. Вот и думаю, как это можно реализовать.
Что еще можете посоветовать?
Ну так можно использовать комбинацию символов.
Цитата: Mephala
Параметрами могут быть, как числа, дата и время, текст, так и массивы, ссылки и объекты.
Почему бы не использовать XML.
Цитата: Mephala
Доброго всем дня!
Необходимо параметры функции записать в строку, а затем строку распарсить и выбрать оттуда все параметры (пишется провайдер между программами). Параметрами могут быть, как числа, дата и время, текст, так и массивы, ссылки и объекты.
Среда разработки - Delphi 7.
Какой лучше выбрать для этого разделитель? Точка с запятой, запятая, пробелы могут встретиться в тексте, ковычки - тоже не очень как-то.
Может кто-нибудь сталкивался с такой проблемой? Поделитесь, пожалуйста, опытом.
Спасибо!
Необходимо параметры функции записать в строку, а затем строку распарсить и выбрать оттуда все параметры (пишется провайдер между программами). Параметрами могут быть, как числа, дата и время, текст, так и массивы, ссылки и объекты.
Среда разработки - Delphi 7.
Какой лучше выбрать для этого разделитель? Точка с запятой, запятая, пробелы могут встретиться в тексте, ковычки - тоже не очень как-то.
Может кто-нибудь сталкивался с такой проблемой? Поделитесь, пожалуйста, опытом.
Спасибо!
разделитель выбирайте любой. просто перед вставкой разделителя - пробегайте по строке и экранируйте то, что у вас является разделителем. например - двоеточия. потом, после разбора по разделителям - убирайте экранирующий символ.
Сначала передается 4 байты длины последующего блока данным, потом сам блок, потом опять 4 байта длины и еще блок. И так пока очередные 4 байта длины не станут 0. Вот так очень обще идею изложил
В принцие, конечно, желательно предусмотреть и обрабатывать ситуацию, когда разделитель встречается в тексте. Например, удваивать его при кодировании и совершеть обратное преобразование при декодировании.
Цитата:
Вообще, все символы могут встретиться, так как и бинарные данные тоже встречаются среди параметров.
Вообще-то размещать вперемешку текст и бинарные данные - нонсенс.
Обычно либо бинарные переводят в вид текста (форматное преобразование или UUE-кодирование), либо текст рассматривают как бинарные данные.
В любом случае для деления бинарных данных на порции используют не разделитель, а заголовок с указанием длины. Так что надо сперва определиться: текст или бинарные, и уже после этого применять соответствующий механизм.
Сама понимаю, что объединять текстовые и бинарные данные - нонсенс. Но по другому я не вижу как построить взаимодействие между модулями.
Суть такая, что из дельфовой программы нужно передать в хранимую процедуру СУБД (dll) входные параметры. А так как количество входных параметров может быть разным для разных функций, то было принято решение занести все параметры в один. Если у вас есть лучшее решение и пр., то буду рада любой критике :)
И еще вопрос: какие существуют классы, методы, объекты, чтобы парсить и формировать xml? С этим еще не сталкивалась. Буду рада помощи.
Может существуют уже готовые какие-то механизмы формирования строки и ее анализа?
Спасибо!
Цитата: Mephala
Суть такая, что из дельфовой программы нужно передать в хранимую процедуру СУБД (dll) входные параметры.
ADO с этим справляться умеет.
можно сделать такой хитропопый ход в случае, если строки передаются: в первой строке передать некий набор случайных символов промеж фигурными скобками (это я к примеру). и дальше всё разделить именно этим набором, опять же промеж фигурными скобками. я так обычно поступаю, когда пишу макрос в Word'е для уничтожения лишних "переносов" и определения нужных абзацев.
Т.е. ПРАВИЛЬНОЕ решение, все-таки, - при отсутствии заведомо неипользуемого символа делить данные на блоки и передавать вместе с заголовком, в котором указывается длина очередного блока.
Мне понравился подход с заголовками: проще реализовать и довольно легкий при передачи.
Большое всем спасибо за ответы! Особенно Аndriano :)