Данный пост написан в интересах рабочего процесса.
Ай нид хэлп! По работе нужно сделать программку, которая переводит 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 и иже с ним, подскажите пожалуйста! Очень надо! :)