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

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

Передача массива вариантов в функцию


Страницы:   1 2

Ega23 ©   (2015-03-25 12:39:00) 

Возникла нужда в рефакторинге. И вот что-то залип.
Нужен примерно такой код:

TSomeClass = class
private
 FData: Variant;
 FProcessors: TObjectList<TSomeProcessor>;
public
 procedure MakeDataArray();
end;

TSomeProcessor = class
....
public
 procedure FillData( ????  ); virtual;
end;

const
 cDataArrWidth = 17;

procedure TSomeClass.MakeDataArray() ;
begin
 FData := VarArrayCreate([0, SomeCount - 1, 1, cDataArrWidth], varVariant);
 for i := 0 to FProcessors.Cpunt - 1 do
   FProcessors.FillData( FData ???);
end;


Суть. Собираются данные для экспорта в Excel в виде двумерного массива. Поскольку данные неоднородны (где-то строки, а где-то в той же колонке могут быть и цифры), то создаётся эта байда как массив вариантов.
Дальше есть список неких "процессоров", которые этот массив по причудливой логике заполняют. Внутри процессоров размерность массива никак не изменяется.

Так вот, собственно, каким макаром мне этот мой FData: Variant; передавать в процессоры? Попробовал как вариант - у него vartype интересный, $800C. Т.е. и varArray и varVariant разом.

Пардон за сумбур. XE4.


Ega23   (2015-03-26 09:16:00) [21]


> что оба обращения эквивалентны



procedure TForm32.Bar3(var V: Variant);
begin
 V[1, 1] := 1;
end;

Работает.


procedure TForm32.Bar3(var V: Variant);
begin
 V[1][1] := 1;
end;

E2064 Left side cannot be assigned to


KilkennyCat   (2015-03-26 03:19:00) [22]

любопытно.
по крайней мере, здесь http://docwiki.embarcadero.com/RADStudio/XE6/en/Structured_Typesутверждается, что оба обращения эквивалентны


Ega23   (2015-03-26 02:34:00) [23]


> В каком случае [i][j] не годится?


В том тесте, который я наваял.
Завтра (точнее - утром... гм... после 10, короче) код выложу.


Германн   (2015-03-26 01:42:00) [24]


> Ega23 ©   (25.03.15 16:09) [3]
>
>
> > А разве это не одно и то же?
>
>
> не совсем.
>

Почему не совсем? В каком случае [i][j] не годится?


Ega23   (2015-03-25 16:09:00) [25]


> А разве это не одно и то же?


не совсем.


Германн   (2015-03-25 13:40:00) [26]


> Тупанул, обращался к двумерному массиву через [i][j], вместо
> [i, j]

А разве это не одно и то же?


Ega23   (2015-03-25 13:08:00) [27]

Вопрос снят. Тупанул, обращался к двумерному массиву через [i][j], вместо [i, j]

А передавать надо так:


TSomeProcessor = class
....
public
procedure FillData(var Data: Variant); virtual;
end;


Страницы:   1 2

Наверх

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