Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Какой выбрать разделитель при передаче параметров [D7, WinXP]


Страницы:   1 2 3

Mephala ©   (2008-09-05 10:47:00) 

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


Медвежонок Пятачок   (2008-09-08 11:39:00) [21]

Что, по сути, то же самое,

только в разы более гибкое и более сопровождаемое в разы.


Юрий Зотов   (2008-09-08 11:38:00) [22]

> Медвежонок Пятачок ©   (08.09.08 11:34) [25]

> преимущества в декларативном характере алгоритма чтения.

Это всего лишь слова.

> принимающая сторона не заморачивается с необходимостью
> знания физического порядка данных в передаваемом блоке.

Зато она заморачивается с необходимостью знания имен параметров (тегов). Что, по сути, то же самое, только существенно медленнее и существенно более громоздко.


Медвежонок Пятачок   (2008-09-08 11:37:00) [23]

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


Медвежонок Пятачок   (2008-09-08 11:34:00) [24]

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


Юрий Зотов   (2008-09-08 11:24:00) [25]

> Медвежонок Пятачок ©   (08.09.08 11:09) [23]

То есть, все равно пишем нового клиента. В чем же преимущество?

Применяем такую структуру данных:
Длина параметра - тело параметра, длина параметра - тело параметра...

И используем WM_COPYDATA. Количество параметров и их последовательность клиент знает сам.

Потребовалось добавить новые параметры. Добавляем их в конец (согласитесь, что без разницы, куда именно их добавлять). Старые клиенты работают, как работали, а новые клиенты юзают новый протокол.

Все то же самое, что и в Вашем решении. Только Ваше решение будет работать намного медленнее (раз), а объем передаваемых данных будет намного больше необходимого (два).

Недостатки - налицо, а преимуществ - никаких. И на фига ж тогда козе баян?


Медвежонок Пятачок   (2008-09-08 11:09:00) [26]

я уже предложил.
xml.

первая версия протокола передавала три параметра-строки.
зарелизили.
потребовалось больше параметров.
Между вторым и третьим параметрами вставили двумерный список (три элемента в каждом четыре значения)

Старые клиенты продолжают работать как ни в чем ни бывало.
Для получения новых параметров в новом клиенте дописываем код чтения (фактически добавляем новые xpath выражения в алгоритм)


Юрий Зотов   (2008-09-08 11:03:00) [27]

> Медвежонок Пятачок ©   (08.09.08 11:00) [21]

Предложите другой путь. Когда структура передаваемых данных меняется, а в код принимающей стороны не требуется вносить изменений.

Есть такой способ?


Медвежонок Пятачок   (2008-09-08 11:00:00) [28]

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

это наш путь.


Юрий Зотов   (2008-09-08 10:57:00) [29]

> Mephala   (08.09.08 10:44) [17]

> если будут передавать двоичные данные...

Так бы сразу и говорили, а то - строка, строка...

Для произвольных данных решение может быть таким:

Количество элементов (4 байта).
По каждому элементу: длина его данных (4 байта), затем сами данные.

Передавать можно, например, через сообщение WM_COPYDATA.


Медвежонок Пятачок   (2008-09-08 10:47:00) [30]

Что скажите?

скажу что клево все это


Mephala   (2008-09-08 10:45:00) [31]

Да, кстати, СУБД - Advantage SQL.


Mephala   (2008-09-08 10:44:00) [32]

Непечатные символы по идее тоже могут встречаться, если будут передавать двоичные данные...
XML, согласна, будет тяжеловесным решением. По идее, нужно будет все обрабатывать как можно более производительнее, а то будет узким местом в системе.
Появилась идея формировать заголовок в виде: длина параметра - параметр - длина второго параметра - второй параметр и т.д. Разбор вроде, как и формирование, может быть достаточно быстрым - один цикл понадобиться для строки. А вот для удвоения придется уже несколько циклов делать.
Что скажите?


Медвежонок Пятачок   (2008-09-08 09:05:00) [33]

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


KilkennyCat   (2008-09-08 07:48:00) [34]


> И нифига не понимали как соединить два фланца. У одного
> было шесть отверстий для болтов, а у другого восемь! Тут
> никакой напильник не поможет.


зато поможет математика! у 6 и 8 общее кратное 2. значит, на два болта.


Германн   (2008-09-08 00:57:00) [35]


> треугольное после сборки обработать напильником
>

Может лучше сначала подумать и не собирать треугольное?
Плавали знаем. Было как-то. Собирали на нашем в МИФИ заводе установку разработанную нашим же МИФИ конструкторском бюро. И нифига не понимали как соединить два фланца. У одного было шесть отверстий для болтов, а у другого восемь! Тут никакой напильник не поможет.
:)


Медвежонок Пятачок   (2008-09-07 23:40:00) [36]

треугольное после сборки обработать напильником


KilkennyCat   (2008-09-07 23:11:00) [37]

а треугольное?


Медвежонок Пятачок   (2008-09-07 22:10:00) [38]

круглое - носить, квадратное - катать.


KilkennyCat   (2008-09-07 21:42:00) [39]


> И, кроме того - что будет, если юзер все же впечатает этот
> двойной символ? Ему не запретишь.


четыре символа, соответственно....


Медвежонок Пятачок   (2008-09-07 21:24:00) [40]

импортировать библиотеку типов msxml и воспользоваться IXMLDomDocument2


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо