[VB] vullen van array

Pagina: 1
Acties:

  • Remco
  • Registratie: Januari 2001
  • Laatst online: 11:45
Ik wil een array vullen met gegevens.
Maar telkens krijg ik er maar een foutmelding op.
Ik doe iets verkeerd, maar zie absoluut de bomen door het bos niet meer.

Ik zal even uitleggen wat er gebeurd.
Er word een directory-listing gemaakt van de *.dfu bestanden.
Deze worden in een array geplaatst.
Hierna word een combobox gevuld met deze array.
Werkt allemaal prima.

Daarna wil ik uit het bestand het kenteken en opdrachtnummer halen.
Dat werkt ook allemaal prima. (eerst kenteken, daarna opdrachtnummer)

Nu ik de kentekens heb uit de bestanden wil ik deze in een array plaatsen.
Dit doe ik in regel 26. En hier loopt het fout.
code:
1
2
3
An unhandled exception of type 'System.NullReferenceException' occurred in audaexp.exe

Additional information: Object reference not set to an instance of an object.


de opdracht is :
kenteken(filenummer) = kentekennummer
In de debugger heeft filenummer (1) en kentekennummer (12-ab-cd).
Dus deze waardes kloppen wel, maar toch loopt het fout.

Later in regel 34 weer, maar dat is dezelfde routine.


Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
 System.EventArgs) Handles Button1.Click

        Dim files() As String
        Dim file As String
        Dim filenummer As String = 1
        Dim kenteken() As String
        Dim opdracht() As String
        Dim kentekennummer, opdrachtnummer As String
        Dim temp_string As String = ""
        'variabelen voor bepalen positie gegevens.
        Dim begin As String = 77
        Dim einde As String = 8
        Dim begin1 As String = 42
        Dim einde1 As String = 8

   files = Directory.GetFiles(bron, "*.dfu")     

   For Each file In files
            ComboBox1.Items.Add(file)
            FileOpen(filenummer, file, OpenMode.Input)

            'kenteken uit bestand file halen
            While Not EOF(filenummer)
                temp_string &= LineInput(filenummer)
            End While
            kentekennummer = Mid$(temp_string, begin, einde)
            kenteken(filenummer) = kentekennummer

            'opdrachtnummer uit bestand file halen
            temp_string = ""
            While Not EOF(filenummer)
                temp_string &= LineInput(filenummer)
            End While
            opdrachtnummer = Mid$(temp_string, begin1, einde1)
            opdracht(filenummer) = opdrachtnummer

            'even wegschrijven naar box voor controle
            RichTextBox1.AppendText(opdrachtnummer)
            RichTextBox1.AppendText(vbCrLf)
            RichTextBox1.AppendText(kentekennummer & "" & opdrachtnummer & vbCrLf)

            FileClose(filenummer)
            filenummer = filenummer + 1
        Next
    End Sub

[ Voor 6% gewijzigd door Remco op 06-04-2003 21:45 ]

The best thing about UDP jokes is that I don't care if you get them or not.


  • Michali
  • Registratie: Juli 2002
  • Laatst online: 22-03 18:12
Als ik me niet heel erg vergis is het eerste argument dat je aan FileOpen geeft een handle naar een file. En die dien je altijd eerst te initialiseren door:

Visual Basic:
1
filenummer = FreeFile()

te gebruiken. Dan krijgt filenummer zoals verwacht een nummer wat nog niet wordt gebruikt.

http://msdn.microsoft.com.../vblr7/html/vastmOpen.asp

http://msdn.microsoft.com...98/html/vafctFreeFile.asp

Het moet dus ook een integer zijn en geen string.

Wat er dus gebeurde was dat je steeds filenummer verhoogd totdat je er een tegenkomt die niet gebruikt kan worden. (denk ik, de fout lijkt op wat anders te wijzen maar probeer eerst dit maar eens te verbeteren)

ik vind dit ook maar eigenlijk een vreemde regel

Visual Basic:
1
Dim filenummer As String = 1

en die daar onder ook.

Ik zou daarom naast die filenummer een andere variabel maken die je dan als index gebruikt.

[ Voor 13% gewijzigd door Michali op 06-04-2003 23:53 ]

Noushka's Magnificent Dream | Unity


  • Remco
  • Registratie: Januari 2001
  • Laatst online: 11:45
Je hebt gelijk.
filenummer moet inderdaad integer zijn, stom...

Maar uiteindelijk heb ik het vannacht in mijn slaap gevonden.
In regel 28 wil ik een waarde in de array stoppen.
Maar de array is dynamisch (ander woord misschien :? ) als ik de arrays als volgt zet:
Visual Basic:
1
2
3
        Dim filenummer As Integer = 1
        Dim kenteken(30) As String
        Dim opdracht(30) As String

Werkt het wel.
In regel 28 zeg ik eigenlijk:
kenteken (1) = "12-ab-cd"
Dat werkt wel, maar niet met een var: kenteken()
Want dan heeft de array nog geen veld 1, alleen 0 want daar begint een array te tellen.

Dan zet ik de array maar vast op 30.
Die waarde zal niet voorkomen. Het is niet netjes, maar ach...

The best thing about UDP jokes is that I don't care if you get them or not.