Текущий архив: 2019.04.07;
Скачать: CL | DM;
Вниз
Неявное обращение к полям record Найти похожие ветки
← →
gog © (2013-02-21 16:27) [0]Здравствуйте
Пусть имеется переменная типа запись:
MyRec = record
V1: Type1;
V2: Type2;
...
Vn: Typen
end;
Требуется прочесть значение определённого поля записи. Имя поля (из множества V1...Vn) генерируется рограммой.
Как в выражение типа X:= MyRec.Vm в место явного значения Vm указать значение поля сненерирнованное программой?
Версия Дельфи XE
← →
brother © (2013-02-21 16:59) [1]> Имя поля (из множества V1...Vn) генерируется рограммой
О_о это новые фишки делфи или я чего-то не понимаю, КАК?
← →
Медвежонок Пятачок © (2013-02-21 17:04) [2]имена полей рекорда живы пока ты не нажал f9
← →
Inovet © (2013-02-21 17:06) [3]Перебирать через case, например.
← →
O'ShinW © (2013-02-21 17:17) [4]
> имена полей рекорда живы пока ты не нажал f9
отсюда можно предположить, что нужно
> в место явного значения Vm указать
смещение, вычисленное
> программой
и рекорд упаковать.
← →
MBo © (2013-02-21 17:17) [5]Только через (новое) RTTI.
А вообще выбран какой- то извращенный метод, надо пересмотреть идеологию.
← →
Медвежонок Пятачок © (2013-02-21 17:30) [6]пересмотреть идеологию.
<record>
<v1>1</v1>
<v1>2</v1>
<v1>3</v1>
</record>
← →
Медвежонок Пятачок © (2013-02-21 17:31) [7]<record>
<v1>1</v1>
<v2>2</v3>
<v3>3</v3>
</record>
← →
gog © (2013-02-21 17:45) [8]Господа
Я ничего не понял из вашей переписки.
А вообще это возможно?
Если нужно я более конкретно поставлю задачу.
← →
clickmaker © (2013-02-21 17:48) [9]> Я ничего не понял из вашей переписки
Так вроде уже всё ответили...
1) RTTI
2) case (но число вариантов конечно и известно заранее)
3) XML
4) DataTable / DataSet в памяти
← →
Плохиш © (2013-02-21 18:01) [10]
> gog © (21.02.13 17:45) [8]
Delphi использует для создания выполняемого кода компилятор.
Отличие компилятора от интерпретатора надо объяснять "программисту с высшим образованием"?
← →
Dimka Maslov © (2013-02-21 18:02) [11]Руками создать таблицу соответствия имени и смещения?
← →
Slym © (2013-02-22 06:30) [12]если размер полей одинаковый то можно перевести в массив
и добавить массив имен.
MyRec = record
V1: integer;
V2: integer;
...
Vn: integer;
end;
const V:array of string=("v1","v2","v3"...);
TIntegerArray(MyRec)[FindNameIndex(v,FieldName)]
← →
Inovet © (2013-02-22 10:33) [13]> [12] Slym © (22.02.13 06:30)
Ненадёжный способ, тогда лучше
> [11] Dimka Maslov © (21.02.13 18:02)
> соответствия имени и смещения
Страницы: 1 вся ветка
Текущий архив: 2019.04.07;
Скачать: CL | DM;
Память: 0.49 MB
Время: 0.005 c