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

Вниз

олучение одномерного массива вариантов из двумерного   Найти похожие ветки 

 
Антоха   (2011-11-23 15:31) [0]

Есть двумерный массив вариантов v
VarArrayDimCount(v) = 2
VarArrayHighBound(v,1) = 40000
VarArrayHighBound(v,2) = 2

Есть ли какая-нибудь функция получения одномерного массива вариантов из двумерного?
сейчас делаю так, но хочется шустрее
for k :=1 to RowCount do
  a[k]:=d[k,1];


 
han_malign   (2011-11-23 15:56) [1]

TVariantArray = array[0..2*40000-1]of variant;
PVariantArray = ^TVariantArray
...
PVariаntArray(VarArrayLock(d))


только нужно помнить, что:

The pointer returned by VarArrayLock points to an array of elements in which the leftmost dimension increases first. In other words, the dimensions of the returned array pointer are reversed from the dimensions of the variant array.

- то есть в твоем случае это будет array[1..2, 1..40000]of variant
{(1,1), (1,2), ... ,(1,40000), (2,1), (2,2), ... ,(2,40000)}

Ну и про VarArrayUnlock не забывать...
И move - нельзя, т.к. variant - умный тип...


 
OW ©   (2011-11-23 15:58) [2]

а зачем,

если не пройдет с вариантом способ absolute
 a: array [1..5, 1..2] of Integer;
 b: array [1..10] of integer absolute a;
 i,j: Integer;
 s : string;
begin
 for i := 1 to 2 do
  for j := 1 to 5 do
    a[j,i] := i + (j-1)*2  ;

 for i := 1 to 10 do
    s := s + IntToStr(b[i]) + " ";

 ShowMessage( s);

то следует обращаться просто по формуле
a[j,i] := b[i + j*размерность]
т.е. если хотим взять катый элемент, берем [ К mod РАЗМЕР, К div РАЗМЕР ]


 
han_malign   (2011-11-23 16:05) [3]

аааа... - это что-ли?
a:= VarArrayOf(Slice(PVariаntArray(VarArrayLock(d))^, 40000));
VarArrayUnlock(d);

правда a - с нулевой базой получится(a[0] ... a[39999])...


 
Loginov Dmitry ©   (2011-11-23 21:50) [4]


> сейчас делаю так, но хочется шустрее


Что имеется ввиду пот термином "шустрее". Шустрее написать программу (2 строки вместо 3)? Или же не устраивает скорость выполнения текущего варианта?


 
Германн ©   (2011-11-24 00:47) [5]


> Есть ли какая-нибудь функция получения одномерного массива
> вариантов из двумерного?

А для какой задачи?


 
Антоха   (2011-11-24 08:35) [6]


> А для какой задачи?

получаю данные из программы SAP

d := Funct.Tables.item(i).Columns.item(j).Data;
d это variant который в свою очередь array of variant
он оказался двумерным
я делаю так

A := VarArrayCreate([1, RowCount], varVariant);
for k :=1 RowCount do
  impArr[k]:=d[k,1];


а дальше пишу этот массив в параметр запроса
OracleQueryInsert.SetVariable("col1",a);
OracleQueryInsert.ExecuteArray(0,RowCount);



> Или же не устраивает скорость выполнения текущего варианта?

именно


 
Антоха   (2011-11-24 09:31) [7]


> > Или же не устраивает скорость выполнения текущего варианта?
> именно

Хотя засек я по времени ... цикл вроде шустро работает ... тормоза
d := Funct.Tables.item(i).Columns.item(j).Data;
и тут
OracleQueryInsert.SetVariable("col1",a);
так что вопрос снимаю
Всем спасибо за помощь



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

Форум: "Основная";
Текущий архив: 2014.02.16;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.002 c
2-1366383198
Теркин
2013-04-19 18:53
2014.02.16
Как получить список форм проекта?


2-1365768017
__
2013-04-12 16:00
2014.02.16
Что может быть с системой если после int 3 спасает только Reset


2-1366331872
novai
2013-04-19 04:37
2014.02.16
перекрыть WindowProc


15-1377887629
Ротанг
2013-08-30 22:33
2014.02.16
Дополнительный виртуальный монитор


2-1366625537
novai
2013-04-22 14:12
2014.02.16
проблемма с BorderStyle:= bsNone;





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский