20.02.2024 10:34
Vložení přílohy do dokumentu MS Word (3)
14.02.2024 20:54
Problěmy s diakritikou. (4)
06.02.2024 17:34
AI pomocnici
15.01.2024 10:16
Export do pdf souboru (1)
12.01.2024 23:11
Agent přestává fungovat (1)
18.11.2023 06:42
RTF - Computed (2)
19.10.2023 13:00
Čtení polí v neuloženém dokumentu
08.10.2023 17:15
Běžně není možné v LotusScriptovém poli definovat více než 32768 prvků v jednom rozměru, tj. např. prvek(32769) již je vyhodnocen jako chybný. Toto omezení je možné obejít definicí třídy IntegerArray.
Definici třídy pro pole typu Integer je následující (je samozřejmě možné ji upravit i pro jiné typy než Integer) - metoda sample je jen ilustrační a naplní všechny prvky pole náhodnou hodnotou z intervalu 0 až 32767:
Class IntegerArray
n As Long
i As Long
i1 As Integer
i2 As Integer
q As Integer
a() As Integer
Sub new(n0 As Long)
n=n0
q=Sqr(n)
Redim a(q-1,q-1) As Integer
End Sub
Sub putitem(n0 As Long,v As Integer)
i1=Int(n0/q)
i2=n0 Mod q
a(i1,i2)=v
End Sub
Function getitem(n0 As Long) As Integer
i1=Int(n0/q)
i2=n0 Mod q
getitem=a(i1,i2)
End Function
Sub Sample
For i=0 To n-1
putitem i,Rnd*32767
Next
End Sub
End Class
A příklad, jak se třída používá:
Sub Initialize
Dim a As New IntegerArray (16000000) ' alokujeme celočíselné pole s 16 milióny prvky - pozor, je to celých 32MB paměti
a.sample ' naplníme pole náhodnými hodnotami
MsgBox a.getitem(489392) ' přečteme prvek na pozici 489392
a.putitem(8349294,19293) ' a uložíme hodnotu 19293 na do prvku číslo 8349294
End Sub
Celý příklad je jen nastíněním možného řešení problému, bylo by vhodné ošetřit normalizaci indexů (aby nemusely začínat na 0 nebo 1 - podle nastavení Option Base - ale od libovolného čísla), rovněž by bylo možné řešit metody třídy obecně a ne jen pro celočíselné prvky. V každém případě je ale třída i v daném stavu pro daný účel použitelná.
Zdroj: ITkey
Autor: Zdeněk Michálek
Datum: 01.06.2001
Sdílet článek Seznam komentářů
Zatím nebyl přidán žádný komentář. Buďte první!