vb 2008 array

Status
Niet open voor verdere reacties.

migthy84

Gebruiker
Lid geworden
13 okt 2009
Berichten
580
op dit moment ben ik bezig met een programma aan het schrijven waarbij verschillende array nodig zijn.

het probleem is dat ik niet echt weet hoe een array werkt in VB elke keer krijg ik deze foutmelding

"System.OutOfMemoryException was unhandled Message="Er is een uitzondering opgetreden van het type System.OutOfMemoryException."
Source="mscorlib"

Het enige wat ik doe

dim test() as string
test(0) = "test

ook als ik hem ander declareer
dim test as string()

Het uiteindelijk doel is dat ik een 5d array ga krijgen.
array5d(datum,vraag, antwoord, views,einddatum).

In totaal zijn 25.000 excel lijn die ik op dien te halen (a - p)
 
Laatst bewerkt:
Volgens mij wil je geen vijf-dimensionale array.

Blijkbaar heb je in een excelsheet 25000 rijen, en per rij de kolommen datum, vraag, antwoord, views, einddatum.

Daar maak ik hooguit een eendimensionale array van records van.


5D-arrays kunnen erg groot worden.
Als elke coordinaat 20 mogelijke waarden zou kunnen bevatten dan zit je al op 20^5 = 3200000 entries.
Dus logisch dat je out-of-memory exceptions krijgt als je met 5-arrays gaat werken.
 
nee elke coördinaat word niet standaard in de array gezet. in mijn geval voeg ik de laatste 3 toe aan als 1 string.

mijn doelstelling was om de array wat effectiever te maken. door een afsplitsen op datum en op vraag zodat je gemakkelijk kon sorteren.elke datum en vraagstuk krijgt daardoor verschillende entries in de array. Zodat je snel kan vergelijken.

Het lijkt me namelijk erg onhandig om elke keer door het gehele array te moeten lopen om er achter te komen of er geen dubbele data in de array zit.

Verschillende array is ook niet mogelijk omdat ik nooit van te voren weet hoeveel vraagstukken ik heb. Het nadeel van verschillende array's kan ook zijn wanneer je ze samenvoegt je verkeerde data kan neer zetten.

Doelstelling : ik haal gegevens op van Excel en stop deze string. Daarna ga ik bekijken of de string niet over heen komt met het gene wat in de array staat.
Zo niet mag je de string toevoegen , zowel verhoog ik de teller(views) in de array.

Mijn 1e plan was om ervoor te zorgen dat om alleen de 1,2,3 element bekeken gaat worden. Het mag namelijk wel zo zijn dat vraag A op vandaag als morgen gesteld mag worden. Dit houdt in de vraag A in principe niet meer gelijk is aan vraag A van de vorige dag. Zodat ik een telling kon doen door te vragen hoeveel elementen heb je.

Mijn 2e plan was alles dan maar in 1e in array te stoppen. De array te sorteren en vervolgens alles in de 2e array te stoppen. In de 2e array zou niet meer en minder bestaan uit vraag , datum en aantal keer gesteld en views. Vervolgens alles in Excel neer te zetten. De telling van vragen is namelijk het meest cruciale van alles.
 
Laatst bewerkt:
Ik heb die OutofMemory-exception nu ook gekregen.:cool:

Dat heb ik zo gedaan:

Code:
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim Stringetje(0 To 99, 0 To 99, 0 To 99, 0 To 99, 0 To 99) As String
        Stringetje(1, 22, 71, 0, 38) = "Hello world"
        MsgBox(Stringetje(1, 22, 71, 0, 38))
    End Sub

Dit is dus een 5-dimensionale array.
VB zal voor een 5-dimensionale array in een klap zeer veel geheugen proberen te reserveren.

Voor mijn voorbeeld-array Stringetje gaat hij ruimte reserveren voor 100 x 100 x 100 x 100 x 100 strings.
Dat zijn er 10.000.000.000.
Dat is erg veel geheugenruimte!!

Kortom: kijk uit met 5-dimensionale arrays.
Zoek een andere oplossing!!
 
Ik heb die OutofMemory-exception nu ook gekregen.:cool:

Dat heb ik zo gedaan:

Code:
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim Stringetje(0 To 99, 0 To 99, 0 To 99, 0 To 99, 0 To 99) As String
        Stringetje(1, 22, 71, 0, 38) = "Hello world"
        MsgBox(Stringetje(1, 22, 71, 0, 38))
    End Sub

Dit is dus een 5-dimensionale array.
VB zal voor een 5-dimensionale array in een klap zeer veel geheugen proberen te reserveren.

Voor mijn voorbeeld-array Stringetje gaat hij ruimte reserveren voor 100 x 100 x 100 x 100 x 100 strings.
Dat zijn er 10.000.000.000.
Dat is erg veel geheugenruimte!!

Kortom: kijk uit met 5-dimensionale arrays.
Zoek een andere oplossing!!

Bedankt voor de moeite.
Het is wel erg jammer dat vb in principe erg slecht met de array waardes om gaat..

Heb waarschijnlijk de oplossing al gevonden ook al weet ik niet of excel mee wit werken hieraan. Hopelijk kan excel overweg met een dubbele sortering. Als het mogelijk is ga in het begin sorteren om datum en daarna op vraagstuk.

voorbeeld:
a b c
10-10 1234 antwoord
10-10 1234 antwoord a
10-10 2345 antwoord c
10-10 2345 antwoord d
11-10 1234 antwoord b

etc.
Het voorbeeld is natuurlijk super klein. Maar het geeft wel aan hou ik wil sorteren. Eerst wil dat de datum op volgende staan ,vervolgens de vraagstuk. Datum is leidend gevolgd door vraagstuk.

het proces komt er dan anders uit te zien.

haal de datum op met daarna vraagstuk.
Zolang vraagstuk gelijk is aan vorige vraagstuk is: Verhoog de teller
Is de het antwoord niet gelijk zet het in de array, zo niet, doe er niks mee.
IS het vraagstuk niet gelijk.
Schrijf de gehele array weg in excel
destroy de Array. (array ==nothing)
Maak een nieuw array aan.

Voordeel van deze oplossing is dat de array nooit groot is.De data in de array hoeft nooit verder geleken dienen te worden.

Zit er bijna aan te denken om alles maar in een arraylist te stoppen. Hoe gaat VB om open ruimte is Arraylist.

Stel je voor je hebt waarde 4532 en 987023.

stringetje = arrylist(4532);
stringetje = arraylist(967023);

hoe gaat VB hiermee overweg. Vraagstuk hebben altijd een nummer ,die uniek is maar nooit opvolgende is. dus Geen auto increment
 
Laatst bewerkt:
Maak anders een klasse van vraagstuk.
Vervolgens een klasse vraagstukken die een lijst bijhoudt met vraagstukken.

Hierin maak je functies als:
- Toevoegen
- Verwijderen
- ZoekenOpDatum
- ZoekenOpNaam
- ZoekenOp.....
- Sorteer

Op deze manier maak je een klasse die de lijst beheerd.
Geef altijd array terug maar gebruik intern een listOf(vraagstuk)

Dit geeft je een hele schone code in je main + het is herbruikbaar.
 
Je stelt voor om dus alles in 1 keer op te halen, om vervolgens te verwerken. Vraagstuk is dan vervolgens een Array met de getWaarde)

Op dit moment heb ik een getklasse(haalt de totaal alles op.) een addwaarde( die voegt waarde toe per werkblad per excel)

in de setwaarde (wordt de array klaar gezet om rechtstreeks door gepusht te worden naar de addwaarde. Deze zet het het puur op het excel blad met 2 kleine berekening.

de addwaarde heeft 3 funties per rij , kolom of totaal (totaal is niet meer een berekening van rij keer kolom) per rij word het meest gebruikt. Ook dien je deze functie te vertellen welke werkblad(sheet) en bestand het heen geschreven dient te worden. In principe de tegenwaarde van getWaarde.

alleen heeft getWaarde nog een belangrijk functie er bij. Set kolom waarde. Deze functie gaat eerst controleren wat er op rij 1 staat (de kolom in delen) vervolgens vult hij de kolom waarde. Het voordeel hiervan is , mocht ik ooit in de toekomst mijn excel in deling wijzigen of toevoegen. Dat ik de rapportage tool niet hoeft te wijzigen. Alleen maar een nieuw aanroep er bij hoeft te voegen. Op hoofdletter word niet gelet alles word lowercase opgehaald. (Vraagstuk word dus vraagstuk)

Gaat het sorteren van 25000 regels niet erg traag.

Bubbelsort is niet anders dan kijken ben ik kleiner als me voorganger zo ja zet ik het ervoor. Zo niet blijf ik staan. Ik ben er bang voor om ervoor te zorgen dat de array 25000 facteltijd er door heen gaat..

Mij lijkt me meest logisch om er voor te zorgen dat wanneer ik de data binnen haal de sortering plaats vind. Of levert dit niks op ,omdat dan elke keer het Excel object stil blijf staan.

Wat dient de klasse vraagstuk te doen. Is dit een kalle klasse met alleen een arrylist of array
 
@mighty84:
Het enige wat ik nergens in jouw posts lees, is wat jouw programma - uiteindelijk - voor jou moet gaan doen.
Wat is de achterligende gedachte nu eigenlijk? Wat moet jouw programma opleveren?
 
@mighty84:
Het enige wat ik nergens in jouw posts lees, is wat jouw programma - uiteindelijk - voor jou moet gaan doen.
Wat is de achterligende gedachte nu eigenlijk? Wat moet jouw programma opleveren?

doelstelling :
1 excel bestand vol met data. Deze data moet omgezet gaan worden naar verschillende excelsheets die als rapportage gaan dienen. In de data staan verbindingen die gelegd dienen te worden zodat er een nette rapportage kan komen. De data opstelling moet dynamisch kunnen zijn

Mijn eerste gedachte

de achterliggende gedacht is dat ik geen zin heb om de mutaties elke dag of elke week zelf alles te gaan sorteren op juist bladen gaat zetten(met de kans dat ik me zelf vertel)

Normaal zou ik die op database niveau oplossen ,maar dat gaat op dit moment even niet omdat het een excel format terug geef.
 
Laatst bewerkt:
mmmm....
ik heb het nog eens doorgelezen maar ik denk dat mijn commentaar maar even moet vergeten.
 
@Jabber ,
je mag best wel je commentaar leveren. Elk commentaar kan ik namelijk verbetering in het systeem aan brengen.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan