Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2009.10.04;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.5 MB
Время: 0.008 c
6-1207630477
_DATA_
2008-04-08 08:54
2009.10.04
Отправка данных через сокет в отдельном потоке


2-1248593200
xyz
2009-07-26 11:26
2009.10.04
обновление DBLookupListBox не работает


2-1248445454
Zalm
2009-07-24 18:24
2009.10.04
Fatal error в Delphi 7


11-1204725355
andreil
2008-03-05 16:55
2009.10.04
Организовать правильную работу с потоками...


15-1249065216
tesseract
2009-07-31 22:33
2009.10.04
Захватившие власть коммуноцентристы опять ...





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский