Avatar billede angelenglen Nybegynder
01. marts 2006 - 12:15 Der er 5 kommentarer og
1 løsning

Læs fil ind i array

Hvad går galt her, jeg forsøger at læse indholdet af en tekst-fil ind i et array:


Dim FilNummer As Integer
Dim MinStreng() As String
Dim FilNavn As String
Dim i As Integer
FilNummer = FreeFile
FilNavn = App.Path & "\oversigt.txt"
Open FilNavn For Input As #FilNummer
Do While Not EOF(FilNummer)
  'Line Input #FilNummer, MinStreng(i)
  i = i + 1
Loop
Close #FilNummer

MsgBox "tester: " & MinStreng(1), vbInformation, "test"



Jeg får følgende fejl:
Run-time error '6':
Overflow

Når jeg vælger "Debug" markerer den følgende linie:
  i = i + 1


Jeg vil gætte på at den går ind i et uendeligt loop fordi den aldrig når EOF - men hvorfor når den ikke EOF?
Avatar billede supertekst Ekspert
01. marts 2006 - 12:21 #1
FreeFile - værdi?

MinStreng er def. som array - men ikke tildelt størrelse?

...så vidt jeg kan se
Avatar billede kabbak Professor
01. marts 2006 - 12:31 #2
Dim FilNummer As Integer
Dim MinStreng() As String
Dim FilNavn As String
Dim i As Integer
FilNummer = FreeFile
FilNavn = App.Path & "\oversigt.txt"
I = 1
Open FilNavn For Input As #FilNummer
Do While Not EOF(FilNummer)
redim preserve Minstreng(i)
  'Line Input #FilNummer, MinStreng(i)
  i = i + 1
Loop
Close #FilNummer

MsgBox "tester: " & MinStreng(1), vbInformation, "test"
Avatar billede kabbak Professor
01. marts 2006 - 12:32 #3
Dim MinStreng() As String
skal rettes til
Dim MinStreng() As Variant
Avatar billede joern Nybegynder
01. marts 2006 - 12:38 #4
Hej.

Hvis ikke du dimensioner array'et til en fast størrelse, må du anvende kommandoen Redim Preserve.  Jeg vil anbefale, at du sætter array'et til en størrelse, du er sikker på et stor nok.
Redim Preserve kan spare lagerplads i RAM, men med de ram-mængder nutidens maskiner har er det nærmest ligegyldigt.  Der er dog også den fordel, at array'et ikke kommer til at indeholde tomme poster.

Når dit indeks er integer, kan du skrive Dim MinStreng(32000) As String, integer har en grænse dér.  Skal der være plads til mere, må du bruge Long.

Altså ENTEN fast størrelse ELLER Redim Preserve - ikke både og!!


i = 0
Open FilNavn For Input As #1
Do While EOF(1) = False
  Redim Preserve minstreng(i + 1)
  Line Input #1, MinStreng(i)          'du har udkommenteret denne linie!
  i = i + 1
Loop
Close #1
Avatar billede angelenglen Nybegynder
01. marts 2006 - 12:51 #5
Joern - det fungerede fint :-)

Mange tak!
Avatar billede thomaxz Nybegynder
01. marts 2006 - 13:09 #6
Man bør aldrig brug Variant[kabbak] da den er spild af hukommelse plads.
Det er meget,meget,meget få seder det er nødvenidg med Variant.
Men det er det ikke her. der String fint nok.

-Thomas
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