Zdravím všechny, koho tohle téma zajímá
Abych lépe vysvětlil, o co se mi jedná ...
Asociované pole dokáže ukládat udaje asociované s klíčem, tozn, že se jedná o strukturu, kde klíč představuje trivialní hodnotu ( 1, 2 ,23 ,"Petr", "Pavel")
a této hodnotě je přiřazen libovolný údaj (triviální, pole, objekt ).
V praxi vytvořím definici pro import strukturovaných dat s údaji pevné délky (v tomto případě se jedná o INVOIC fakturu) a jelikož jsem nechtěl, aby se mi v kódu hemžily funkce mid(řádek, pozice, delka), snažil jsem se o záznam těchto dat do asociovaného pole. Toto ale ooBasicu nemáme, nejbližší možná náhrada je Collection. Tato je ovšem importovaná na podporu collection z VBA, a SKUTEČNĚ jsem k ní nenašel žáden popis, dokonce ani v kukátku neuvidíte více, než že je to collection.
kód - tak jak jsem jej uvedl v úvodním příspěvku - asi nefunguje, protože msgboxuju pole, ale v mém případě funguje bez potíží.
Ve funkci, která řeší ctení dat
****nejprve definice ***
global cSumLine As New Collection
global sLine as string
sub main
cSumline.Add(array(4,12,2),"Zakl0")
....
sLine = aInvFH.readLine ' použita netrivialni funkce pro zachování ne-UTF kódování...
.....
udaj = ctiudaj("Zakl0") ' a tohle vypadá mnohem čitelněji
oCell.string=udaj ' zápis do buňky
end sub
Function ctiUdaj( udaj as string) as Variant
On Error GoTo indexbad
a = cSumLine("Zakl0")
tmp = mid(sLine, a(0), a(1) )
ctiudaj = tmp
indexbad:
end Function
******************
Příklad je ořezán na nutné minimum, jen pro vysvětlení, pokud je zájem, klidně sem postnu celý dokument,
cílem bylo zpřehlednit kód a zkusit něco, co jsem dosud v OOO neviděl, a připadá mi to užitečné.
Co ovšem u kolekcí postrádám, je dotaz na existenci klíče příp. iterace, tedy .. postrádám .. nevím zda tuto vlastnost má, a pokud ano, jak ji použít.
používám ooo (Apache, ne libre) na OpenSuse, i když jsem viděl zaručené informace, že kolekce "jen a pouze" na win strojích (prý se využívá nejaká microsoftí knihovna) tak na suse to jede taky..
A tady odkaz, není těžké najít podobné, nicméně konkrétní popis ani na vývojářských stránkách jsem nedohledal ...
New Collection and Dictionary like VBA
A k těm obezličkám :
asociativní pole z pythonu (zde dictionary) není problém použít, ale zaprvé nikdy jsem nepsal v pythonu vic než pár řákd, nějak se do toho jakzyka nedokážu dostat, a za druhé, nevím skoro nic o integraci pythonu jako makra, nevím, jak se to bělá, jestli lze volat pythoní funkce z ooBasicu a naopak.
pokud bych chtěl dosáhnout vlastnosti asociativního pole v ooBasicu jinak než přes kolekci, musel bych v podstatě napsat komplet obslužný kód, který by nějak obsluhoval 2 stejně velké array, jedno pro klíč, jedno pro hodnoty .. a to si nejsem výsledkem jist, takže proto to nazyvam obezličky
Toť asi vše ..
jinak díky za reakce a snahu ..
Milan
Editoval MilanUhrak (12. 12. 2012 10:35:40)