[ FranjoZG @ 25.08.2016. 15:03 ] @
Koristim VarArray za upis/čitanje u excel (brže od pojedinačnog). Naišao sam na problem, a na netu nisam našao objašnjenje, osim da se ne može što mi ne djeluje realno.
Dakle:
Kreiram array (ne znam u naprijed max. dimenziju:
Code:
 
   adn := VarArrayCreate([1,1,1,10], varVariant);
   adn[1,1] := 'nešto';
   ...


Sad bi trebalo rediomenzionirati array u: adn[1,2,1,10] da bi se upisali:
Code:

   adn[2,1] := 'nešto';


Tu nastaje problem. Kako redimenzionirati array? Koliko sam vidio po netu-ne može, što mi ne izgleda vjerojatno.

Mogu to zaobiči, ali uz dodatni kod: TList koji pamti array[1..10], pa kad je gotovo, znam dimenzije i kreiram vararray pa prepišem podatke. Malo mi je nezgrapno.

Možda postoji jednostavniji način ili drugi način za čitanje/pisanje po excel file-u, a da nije po pojedinačim čelijama jer je puno sporije...
[ savkic @ 25.08.2016. 17:36 ] @
Vidim da postoji _VarArrayRedim, možda se sa njim može nešto izvesti.
Kod kreiranja excel fajla najbrži način koji sam našao (osim pravljenja raw formata) je da se svi podaci (u tab delimited formatu) prebace u clipboard, pejstuju i onda preko TextToColumns se dobiju normalni podaci. Ovim pristupom možeš deset hiljada stavki upisati za sekund.
[ FranjoZG @ 26.08.2016. 07:32 ] @
Hvala za savjet, nije mi palo na pamet pastanje. Ima li cipboard ogranićenje u veličini koju može primiti?

VarArrayRedim radi, ali na posljednjoj dimenziji.

Code:

adn := VarArrayCreate([1,1,1,10], varVariant);
VarArrayRedim(adn, 20);


napravit će array: [1,1,1,20]

[ captPicard @ 26.08.2016. 08:46 ] @
Na ovo sam naletio, moždqa pomogne:

B := VarArrayCreate([0, 4], varVariant); This means B is a one dimensional array with Array bounds 0 to 4.

VarArrayReDim(B,8); means the array becomes B[0,8].

A := VarArrayCreate([0, 3, 0, 1], varVariant); means its a two dimensional array.
The elements are A[0,0],A[0,1],A[1,0],A[1,1],A[3,0],A[3,1]

VarArrayReDim(A,4); means the array becomes A[0,3,0,8].
Jope it is clear now. It always changes the right most bounds only.


I vidim da postoji varArrayHighBound pa prouči malo.
[ savkic @ 26.08.2016. 11:38 ] @
> Hvala za savjet, nije mi palo na pamet pastanje. Ima li cipboard ogranićenje u veličini koju može primiti?

Mislim da ne, ili je jako veliko, znam da sam uspesno punio do 65k iz jednog cuga na starijim Excelima, OpenOffice/LibreOffice je ranije imao od 32k.