Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.10.04;
Скачать: CL | DM;

Вниз

Вариантный массив   Найти похожие ветки 

 
Pirog   (2009-07-25 15:05) [0]

Как создать двумерный вариантный массив, если заранее неизвестна его размерность?


 
turbouser ©   (2009-07-25 16:18) [1]

var
 X :array of array of variant;
begin
 SetLength(X,1);
 SetLength(X[0],1);


 
topS   (2009-07-25 16:28) [2]


> Как создать двумерный вариантный массив, если заранее неизвестна
> его размерность?

наверное объявить?
точно также как любой динамический массив. справка разжевывает для начинающих


 
Anatoly Podgoretsky ©   (2009-07-25 16:34) [3]

Нельзя создать, на момент создания размерность должна быть известна.


 
Anatoly Podgoretsky ©   (2009-07-25 16:35) [4]


> turbouser ©   (25.07.09 16:18) [1]

А ты уверен, что ему нужен array of variant, а не вариантный массив?


 
turbouser ©   (2009-07-25 16:37) [5]


> Anatoly Podgoretsky ©   (25.07.09 16:35) [4]

Я уже ни в чем не уверен :)


 
sniknik ©   (2009-07-25 17:38) [6]

> Я уже ни в чем не уверен :)
и правильно, создание не есть объявление...

и кстати
> SetLength(X,1);
> SetLength(X[0],1);
заменяется на SetLength(X,1,1);
D7 уже так поддерживает (раньше вроде нет).


 
palva ©   (2009-07-25 18:12) [7]

Все же вариантный массив это не массив вариантов, а массив, который хранится в вариантной переменной. Чтобы в COM можно было с ним работать.


 
Anatoly Podgoretsky ©   (2009-07-25 18:27) [8]

> palva  (25.07.2009 18:12:07)  [7]

Но автор пока молчит, но видимо это так.


 
Pirog   (2009-07-26 00:04) [9]


> palva ©   (25.07.09 18:12) [7]
>
> Все же вариантный массив это не массив вариантов, а массив,
>  который хранится в вариантной переменной. Чтобы в COM можно
> было с ним работать.
>


абсолютно верно, работаю с excel. После проверки на дупликаты данных программы и данных в excel нужно вывести эти данные в OleVariant размерность которых неизвестна :-(


 
turbouser ©   (2009-07-26 00:29) [10]


> Pirog   (26.07.09 00:04) [9]


> нужно вывести эти данные в OleVariant размерность которых
> неизвестна :-(

ПлакалЪ Весь. ©


 
Pirog   (2009-07-26 01:22) [11]


> turbouser ©   (26.07.09 00:29) [10]
звестна :-(
>
> ПлакалЪ Весь. ©


))короче так..... в 1 и 2 размерность известна
1) загружаю данные в массив из excel
ArrayData2 := VarArrayCreate([1, RowCount2, 1, ColCount2], varVariant);
2) загружаю данные в массив из Grid
ArrayData1:= VarArrayCreate([1, RowCount1, 1, ColCount1], varVariant);
3) Сравниваю строки в этих массивах получаю в массив ArrayData3 не повторяющееся строки. Только как объявить или создать этот массив не пойму размерность то неизвестна на момент получения


 
Юрий Зотов ©   (2009-07-26 09:41) [12]

Может быть, в 2 прохода? На первом проходе сравниваем строки, запоминаем индексы неповторяющихся строк и определяем их количество. Потом создаем массив и заполняем его вторым проходом.


 
Anatoly Podgoretsky ©   (2009-07-26 10:17) [13]

> Pirog  (26.07.2009 01:22:11)  [11]

Разрядность исзвестна в момент занесени данных в ArrayData3


 
Anatoly Podgoretsky ©   (2009-07-26 10:19) [14]

> Pirog  (26.07.2009 01:22:11)  [11]

Не говоря уже о том, что третий вариантный массив не нужен, можно обойтись обойтись признаком в массивах 1 и 2


 
TUser ©   (2009-07-26 10:34) [15]

Вычислять индекс каждый раз. примерно так

TVarArray= class
 FData: array of variant;
 FDiment: integer; // размерность
 FCounts: array of integer; // размеры по каждой из "осей"

 function Data (Indexes: array of integer): variant;

function TVarArray.Data (Indexes: array of integer): variant;
var i, j: integer;
begin
 j := Indexes[0];
 for i := 1 to FDiment - 1 do
   inc (j, FCounts[i-1] * Indexes[i]);
 result := FData [j];
end;


 
Pirog   (2009-07-26 11:43) [16]


> Юрий Зотов ©   (26.07.09 09:41) [12]
>
> Может быть, в 2 прохода? На первом проходе сравниваем строки,
>  запоминаем индексы неповторяющихся строк и определяем их
> количество. Потом создаем массив и заполняем его вторым
> проходом.


Спасибо за инфо....код получился страшноватый ))

      SL1:=TStringList.Create;
      SL2:=TStringList.Create;
      //1 проход ортносительно массива из StringGrid
      for i:=1 to RowCount1 do
      begin
           S1:="";
           for j:=1 to ColCount1 do
           begin
           S1:=S1+ArrayData1[i,j];
           end;

           for l:=1 to RowCount2 do
           begin
               S2:="";
               for m:=1 to ColCount2 do
               begin
               S2:=S2+ArrayData2[l,m];
               end;
               SL1.Add(S2); //çàïîìèíàåì ñòðîêè ìàññèâà èç excel â SL1
           end;

        b:=False;
        for k:=0 to SL1.Count-1 do
        begin
        if (S1=SL1.Strings[k]) then b:=true;
        end;
        SL1.Clear;

        if not b then begin
           // запоминаем индексы не повторяющихся строк в SL2
           SL2.Add(IntToStr(i));
        end;

      end;

       RowCount3:=SL2.Count-1;//определяем их количество
       ColCount3:=ColCount1;//всегда постоянно
       ArrayData3 := VarArrayCreate([1, RowCount3, 1, ColCount3], varVariant);

      //2 проход
      for i:=1 to RowCount3 do  //èäåì ïî SL2
      begin
       for j:=1 to ColCount3 do
       begin
            ArrayData3[i, j]:=ArrayData1[StrToInt(SL2.Strings[i]), j]
       end;
      end;
      SL1.Free;
      SL2.Free;


 
Pirog   (2009-07-26 11:44) [17]


> TUser ©   (26.07.09 10:34) [15]
>
> Вычислять индекс каждый раз. примерно так


что то не совсем понял это......:(


 
Pirog   (2009-07-26 16:12) [18]

еще вопрос правильно ли делаю в конце кодинга?
ArrayData:=null;


 
TIF ©   (2009-07-26 20:56) [19]

> ArrayData:=null;

null? o_O
Может всё-таки nil?


 
Pirog   (2009-07-26 21:25) [20]


> Может всё-таки nil?


ошибку даёт твой nil


 
Anatoly Podgoretsky ©   (2009-07-26 22:11) [21]

> Pirog  (26.07.2009 21:25:20)  [20]

Да он мало чего знает про СОМ и варианты., путает Бабеля с Гегелем.



Страницы: 1 вся ветка

Текущий архив: 2009.10.04;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.093 c
2-1248965387
xyz
2009-07-30 18:49
2009.10.04
не компилируется MessageBox


15-1248985802
Юрий
2009-07-31 00:30
2009.10.04
С днем рождения ! 31 июля 2009 пятница


15-1249126462
DevilDevil
2009-08-01 15:34
2009.10.04
Приложение лезет в реестр


15-1248830322
sm1t
2009-07-29 05:18
2009.10.04
Буржуи уже хоронят РФ


15-1248772370
yantux
2009-07-28 13:12
2009.10.04
ускорение 2D