Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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
2-1477668419
Дмитрий
2016-10-28 18:26
2019.04.07
Type mismatch for field Field1 , expecting: LargeInt


1-1361449630
gog
2013-02-21 16:27
2019.04.07
Неявное обращение к полям record


1-1361086077
mfender
2013-02-17 11:27
2019.04.07
Что-то испортилось в Delphi7


15-1477949401
Юрий
2016-11-01 00:30
2019.04.07
С днем рождения ! 1 ноября 2016 вторник


15-1477337353
Kerk
2016-10-24 22:29
2019.04.07
Программистов, мне кажется, тоже касается.