• Авторизация


Динамическое определение полей в типе record (Delphi). Как реализовать? 25-01-2013 14:31 к комментариям - к полной версии - понравилось!


Данный пост написан в интересах рабочего процесса.


Ай нид хэлп! По работе нужно сделать программку, которая переводит xml-файлы (в частности, xml-тэги) в массив структур (переменная типа record в Delphi)).


Дано: строка вида <plugin name="scene013" thumb="gallery/013.jpg" thumb_weight="" radar="radar4" heading="160" />.

Надо: преобразовать в запись с полями вида имя_поля.значение_поля. То есть, чтобы получилась переменная MyRec (имя задано произвольно) типа record:
MyRec.name='scene013';
MyRec.thumb='gallery/013.jpg';
MyRec.thumb_weight=[];
MyRec.radar='radar4';
MyRec.heading=160;


Одним словом, мне надо в рантайме (т. е. когда программа уже выполняется) задавать названия полей (thumb, radar, name и т. д.) и присваивать им значения. Сложность в том, что количество полей записи MyRec по условию задачи неизвестно; возможные названия полей тоже неопределены (они должны определяться сами в ходе чтения xml-файла.
Я могу создать массив строк, у которого в первом столбце - имена полей, во втором - их значения:
'name' 'scene013'
'thumb' 'gallery/013.jpg'
'thumb_weight' ''
'heading' '160'

Но потом их всё равно как-то надо преобразовать к типу record, чтобы можно было обращаться к полям в виде Массив.Имя_поля=Значение_поля. Например, запросить значение параметра heading: MyRec.heading


На Матлабе это делается элементарно (там динамическая типизация):

MyRec.(field_name)=field_value;
field_name - имя поля, которое мы храним в строковой переменной, field_value - соответственно, значение данного поля. В Матлабе это всё делается рантайм; не надо ничего заранее описывать (количество полей, тип данных поля, имя поля). А вот как это сделать в Дельфи? Я уже рассматривал вариантные поля в переменных типа record, но тоже не вариант, потому что названия полей и их количество надо задавать в области объявления переменных, а также потому, что названия полей нельзя читать из переменных (как в Матлабе).


Кто-нибудь может подсказать какие-либо варианты? Как динамически определять названия полей записи record? Может, есть какие-либо методы типа Record.SetField или Record.Add? Знатоки Delphi и иже с ним, подскажите пожалуйста! Очень надо! :)

вверх^ к полной версии понравилось! в evernote


Вы сейчас не можете прокомментировать это сообщение.

Дневник Динамическое определение полей в типе record (Delphi). Как реализовать? | st_tsourkan - ЖЗЛ: из жизни искателя приключений | Лента друзей st_tsourkan / Полная версия Добавить в друзья Страницы: раньше»