Avatar billede jih Nybegynder
05. april 2009 - 01:24 Der er 7 kommentarer og
1 løsning

Dynamic Array

Hej,

kan man få et array dynamisk? Jeg får hele tiden subscript out of range fejl når jeg tilføjer data til et array:

testkode til at vise hvornår jeg får fejl:

Dim strArray() As String

For intI = 0 To 99
  strArray(intI) = "test" & intI
Next intI

jeg får selvfølgelig ikke fejl hvis jeg skriver
Dim strArray(100) As String

men er der en anden måde at gøre det dynamisk, sådan at jeg kan inkrementere det via et for loop? Det læser nemlig en txt fil som der bliver tilføjet til hele tiden, så det er lidt irriterende at skulle ind og lave arrayet større hver gang jeg skal tilføje data.

På forhånd tak,

// jih
Avatar billede arne_v Ekspert
05. april 2009 - 02:11 #1
prøv:

Dim col As New Collection

For intI = 0 To 99
  col.Add "test" & intI
Next intI
Avatar billede jih Nybegynder
05. april 2009 - 02:29 #2
hmm.. hvordan kan jeg bruge den i den her sammenhæng:

    Open strFilename For Input As #1
        Do While Not EOF(1)
            Line Input #1, strContext

            For intI = 1 To Len(strContext)
                If (Mid(strContext, intI, 1) = "#") Then
                    'tmpNavn(intJ) = Mid(strContext, 1, intI - 1)
                End If
                If (Mid(strContext, intI, 1) = ";") Then
                    'tmpMsg(intJ) = Mid(strContext, intI + 1)
                End If
            Next intI
            intJ = intJ + 1
        Loop
    Close #1
Avatar billede arne_v Ekspert
05. april 2009 - 02:42 #3
Det er lidt svært at sige.

Ovenstående kode kan nemlig i teorien give tommer pladser. Og jeg ved ikke om det faktisk vil forekomme og skal håndteres eller det aldrig vil forekomme.
Avatar billede jih Nybegynder
05. april 2009 - 02:59 #4
tomme pladser? altså.. txt filen bliver opdateret via det samme program som skal læse filerne ind. Når jeg opdaterer, har jeg 3 textfelter som vi nu kalder txt1, txt2 og txt3.. det bliver skrivet ind i filen som: txt1#txt2;txt3

I For loopet vil første If'en læse "txt1" og den anden vil læse "txt3".. txt2 bruger jeg til andre formål.. her vil jeg bare gerne have et dynamisk array (eller et andet alternativ) så jeg ikke behøver at opdatere array størrelsen hver gang. Er det ikke muligt?
Avatar billede arne_v Ekspert
05. april 2009 - 03:44 #5
Som jeg læser koden vil input:

x#y
x;y
x#y
x;y

give 3 arrays med henholdsvis:

"x"
Nothing
"x"
Nothing

og:

Nothing
"y"
Nothing
"y"
Avatar billede kabbak Professor
05. april 2009 - 10:10 #6
Dim strArray() As String, intI As Integer
   
    For intI = 0 To 99
        ReDim Preserve strArray(intI)
        strArray(intI) = "test" & intI
    Next intI
Avatar billede jih Nybegynder
05. april 2009 - 14:26 #7
arne_v > der er ikke noget galt i min kode, jeg har måske bare ikke forklaret det rigtigt nok. Jeg har en liste af film som jeg skriver ned som: filmnavn#genre;beskrivelse (ny linje)

Når jeg læser det ind skal jeg kun vise filmnavn og genre i en listbox, men når jeg dobbeltklikker på listen skal filmnavn og beskrivelse vises i en messagebox.

når jeg henter data fra filen, skal den i search funktionen hente filmnavn og genre, men ikke gøre noget ved beskrivelse (som virker fint)

når jeg henter data fra listboxen, skal jeg bruge et array til at få beskrivelsen og filmnavnet ind i det men lade genre være som det er. Der er aldrig noget Nothing og formatet vil aldrig være anderledes end filmnavn#genre;beskrivelse

kabbak > det virker! smid et svar og du får dine points.
Avatar billede kabbak Professor
05. april 2009 - 14:46 #8
;-))
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester