Man kan ju skapa en type (gruppera massa variabel typer) som en ny variabel typ. >Det där x:t är ett heltal men jag skulle vilja variera det under programets gång. Med risk för att ha missförstått frågan : En collection är ganska bra på att lägga till och ta bort saker ur en lista. Öh? Jag håller med Niklas om att det verkar som om rubriken är lite off, eftersom du ber om hjälp med en array av egendefinierade typer, snarare än en länkad lista.Länkad lista i vb
Sen deklarerar man denna som ex dim variabel[x] as nytyp. Det där x:t är ett heltal men jag skulle vilja variera det under programets gång. Hur gör man det?
Tillämpning:
Läsa in en massa objekt från en fil
Lagra dessa i ett type definierat objekt
Problem:
Man vet inte hur många objekt det är i filen
Och dessa kommer troligen att variera från gång till gångSv: Länkad lista i vb
> Hur gör man det?
Nja......... det går inte , men om du deklarerar den som Double i Typdeklarationen så har du full frihet.
Eller t.om. ,vilket är bad som Variant då kan du tom ha den som String och tal.
Tror att jag svarade rätt.Sv: Länkad lista i vb
Om du deklarerar variablen så här :
Dim mArray() As MyType
...så kan du sedan ändra storlek på arrayen med :
Redim Preserve mArray(1 to max)
Om du vill veta hur många element det är i arrayen så använder du funktionerna LBound() och UBound().Sv: Länkad lista i vb
Problemet är att den inte tar emot egendefinierade typer. Då får du göra en liten klass istället och lägga in en instans av den i klassen.
Exempelvis om du vill lagra information om en person.
(förutsatt att du har en klass cPerson med Förnamn och Efternamn som egenskaper)
Såhär:
<code>
Dim MinColl as Collection
Dim MinPerson as cPerson
Dim n as Long
'Initiera Variabler
Set MinColl = New Collection
'Exempelloop för att lägga till några personer
For n = 0 to 10
Set MinPerson = New cPerson
MinPerson.FNamn = "Kalle" & n
MinPerson.ENamn = "Olsson" & n
'Lägg till personen till collection
MinColl.Add MinPerson
Next n
</code>
Sen hämtar du ut dina personer med antingen
<code>
Dim MinPerson as cPerson
Set MinPerson = MinColl.Item(5)
Debug.Print MinPerson.FNamn & " " & MinPerson.ENamn
</code>
eller om du vill ha alla:
<code>
Dim MinPerson as cPerson
For Each MinPerson In MinColl
Debug.Print MinPerson.FNamn & " " & MinPerson.ENamn
Next MinPerson
</code>
Hoppas det här hjälper....
/EggetSv: Länkad lista i vb
Länkad lista - var får du det ifrån?
Det är visserligen inte svårt att göra, men dels är det ofta väldigt ineffektivt, och dels är det garanterat overkill för detta.Sv: Länkad lista i vb
Problemet du beskriver är himla vanligt, och kan lösas på två sätt.
Om filen som du ska läsa in skapas av dig använder du enklast Put med en fil i Random access mode. VB kommer då att före det faktiska datat skriva en en 2 byte lång descriptor som säger hur många poster man har. Om de sedan läser in med Get (till en array som inte har några bounds definierade), så fixar VB dimensionerna.
Om du ska läsa en datafil vars format du inte har makt över, öppnar du den i Binary access mode. Med hjälp av t.ex LOF()/poststorlek tar du reda på hur måna poster det är (förutsätter att det bara är poster av en typ).
Sedan gör du en ReDim på din array (glöm inte att ange LBound också), och läser in datat med en enda Get. Vill du ha större kontroll läser du förstås in posterna en och en in i varsitt element i arrayen.
Det finns mycket att skriva om VB's sätt att hantera läsning/skrivning av datafiler i olika moder, men det mesta står i MSDN Library.
/Göran