Commentaar op array webpagina

Status
Niet open voor verdere reacties.
Wat is de doelstelling van de pagina? Leerzaam of een verzameling weetjes voor gevorderden?

Een paar puntjes die mezelf even opvallen:

- De "collection" (beperkte standaard VBA dictionary) komt terug in de tekst, maar wordt volgens mij nergens uitgelegd
- Ik persoonlijk zou wat meer ruimte besteden aan "REDIM PRESERVE". Wat mij betreft ligt dat aan de basis van werken met variabele arrays. Een uitgebreid voorbeeld met "redim preserve a_x(ubound (a_x)+1)" in een loop is volgens mij ook behulpzaam.
- "jagged" arrays (arrays in een array). Beperkingen in excel en eventueel gebruik
- Misschien ergens een lijst / samenvatting met alle mogelijkheden en het kiezen uit de mogelijkheden? Array, variabele array, multidimensionale array, collection, list, dictionary, etc. Bruikbaarheid van de "externe" oplossingen qua excel versies / OS (volgens mij 100% met excel2003+ en vista+)
- Misschien de "option base" apart uitlichten, het overvalt je nu een beetje in de tekst. Ook het feit dat microsoft zelf niet consequent is en sommige "interne" arrays wel met 1 beginnen

mogelijk heb ik over sommige dingen heengelopen, maar dit viel me zo op na een snelle scan.
 
@wampier

Dank

- de pagina is bedoeld als antwoord op 2 vragen: wat is een array ? , wat kun je met een array doen ?
- de collection als object komt niet in de tekst voor.
- redim preserve in een loop vind ik vaak een voorbeeld van overbodigheid. Meestal kan de omvang van een dynamische array op enig moment volledig worden bepaald en vastgelegd met Redim. Daarna kan de array worden gevuld. Herhaaldelijk gebruik van Ridim is dan niet nodig.
- welke mogelijkheden/beperkingen zie jij voor 'jagged' arrays die niet ook voor gewone arrays opgaan en behandeld in mijn pagina ?
- de vergelijking van arrays, collection, dictionary etc. gaat veel verder dan deze als basic en allesomvattend bedoelde 'tutorial' over arrays.
 
- de pagina is bedoeld als antwoord op 2 vragen: wat is een array ? , wat kun je met een array doen ?
- de collection als object komt niet in de tekst voor.
aan een 'arraylist' kun je alleen waarden toevoegen, geen 'sleutels' (zoals in een dictionary of collection)
- redim preserve in een loop vind ik vaak een voorbeeld van overbodigheid. Meestal kan de omvang van een dynamische array op enig moment volledig worden bepaald en vastgelegd met Redim. Daarna kan de array worden gevuld. Herhaaldelijk gebruik van Ridim is dan niet nodig.
In het geval van data management en external database imports en XML is dit echter niet altijd het geval. In dat geval krijg je streams van data binnen waarvan het einde onbekend is. Het kan ook je code robuuster en onafhankelijker maker in het gebruik. De kracht van het gebruik van arrays icm redim voor ongedefinieerde datagroottes zie ik als een groot voordeel en eigenlijk de meest toepasselijke vorm van gebruik.
- welke mogelijkheden/beperkingen zie jij voor 'jagged' arrays die niet ook voor gewone arrays opgaan en behandeld in mijn pagina ?
Jagged arrays worden weleens gebruikt met attribute groups. Een vaste lijst kenmerken waar elk kenmerk wel meerdere opties kan omvatten. Veel mensen zullen ze niet tegenkomen, maar ook bij dataverwerking kunnen ze van toepassing zijn. Bijvoorbeeld bij dataimports van verschillende bronnen waar je de source niet kan bedienen.

Stel je hebt altijd deze informatie (en in deze volgorde)

[merk]
Code:
[kleuren]

Je kunt dan een jagged array gebruiken van 3 members. Bij 1 artikel kan er dan [VW][band][zwart] in staan en bij een volgend artikel: [VW;audi][buitenspiegel][rood;geel;groen;wit;zwart]. Nog steeds 3 members, maar elke member kan een variabele hoeveelheid data bevatten. Jagged arrays kunnen soms ook gesimuleerd worden door SPLIT/JOIN constructies, maar ze worden native ondersteund in VBA en als je veel data individueel moet benaderen veel sneller in gebruik dan SPLIT/JOIN.

Ook dit is weer grotendeels flexibiliteit en agnostisch werken met data. Iets wat ik zelf vaak doe in mijn gebruik van VBA.
 
Een algemeen voorbeeld dat makkelijk zo te repliceren is voor iedereen? hmm misschien niet. Maar hier een simpel voorbeeld van een mogelijke situatie:

Code:
    Dim regels() As String
    
    ReDim regels(0)
    Open "c:\boot.ini" For Input As #1
    Do While Not EOF(1)    ' Check for end of file.
        Line Input #1, regels(UBound(regels))
        ReDim Preserve regels(UBound(regels) + 1)
    Loop
    Close #1

Zo kun je de tekstregels uit een willekeurig bestand uitlezen zonder dat je weet hoeveel regels tekst in dit bestand staan.
 
wat ik altijd zo zou doen

Code:
Open "c:\boot.ini" For Input As #1
   sn=split(input(LOF(1),1),vbcrlf)
close

Dat lijkt me even 'agnostisch'.
 
Wat echter niet werkt voor database input, omdat je bijvoorbeeld de "LOF" mist (LOF breekt hier het voorbeeld omdat je met een "hack" voorbij gaat aan de onbekende grootte van de data). Ook hebben "echte" streams vaak geen line feed om op te splitsen.

Het voorbeeld is dan ook meer om de techniek, niet de oplossing van het specifieke probleem voor een file (waar er verschillende van zijn).

PS: Een ander ding is dat die techniek niet werkt op files van 2GB of groter (maar ik begrijp dat dat waarschijnlijk zelden een probleem gaat zijn ;) )
 
Met een database :

Code:
msgbox UBound(.GetRows)

Werkt in ieder geval met ADODB.

Ik zie dus nog steeds geen situatie waarin het meer dan eens uitvoeren van Redim Preserve onvermijdelijk is. ;)
 
De pagina is uitgebreid met paramarray en de methode 'Erase'.

'Jagged' arrays zijn in voorbereiding.
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan