VB2008: Eindimensionales Array nur 256 Werte?

Gast #1971656
Lesenswert?
• ▲
▼
Hallo allerseits,

ich bin in VB ziemlicher Neuling und habe ein Problem mit VB2008 und 
eindimensionalen Arrays. Vielleicht kann mir hier jemand bei meinem 
Problem helfen.

Das Array wird normal initialisiert mit:
1
 Dim dateifeld(5000) As String

Über eine FOR-NEXT-Schleife sollen dem Array Werte zugewiesen werden:
1
For i = 0 To memory
2
dateifeld(i) = Datenfeld(i, 0) & ";" & Datenfeld(i, 1) & ";" & Datenfeld(i, 4) & ";" & Datenfeld(i, 2) & ";" & Datenfeld(i, 3)
3
Next

Das ganze funktioniert so lange, wie i kleiner 256 ist, andernfalls 
kommt eine Fehlermeldung, dass der Wert des Index zu groß ist. Das Array 
ist jedoch bis 5000 initialisiert. Mache ich aus dem eindimensionalen 
Array ein zweidimensionales, dann funktioniert es wie erwartet.

Gibt es eine Größenbeschränkung bei eindimensionalen Arrays oder habe 
ich einfach einen Denkfehler. In meinen Büchern habe ich zur max. Größe 
nichts gefunden. Google sagt irgendwas von über 2 Mio. Felder.

Leider kann ich kein mehrdimensionales Array nehmen, da ich es mit
1
 File.WriteAllLines(sfd.FileName, dateifeld)

speichern will. Diese Funktion spielt m. W. aber nur mit 
eindimensionalen Arrays.

Danke schon mal.
Gast
Lesenswert?
• ▲
▼
whoops! Stimmt, in der Eile überlesen - Der Unterschied zwischen 
"Datenfeld" und "Dateifeld" ist aber auch recht gering.

Der Uwe hat recht, schau' Dir nochmal die Dimensionierung des 
"Datenfeld" an!
Gast
Lesenswert?
• ▲
▼
Das "Datenfeld" ist zweidimensional und wird so dimensioniert:
1
 Dim Datenfeld(5000, 5) As String

Da ich ja bloß die einzelnen Strings aus dem mehrdimensionalen Array 
zusammenfasse und als String in ein eindimensionales Array schreibe, 
sollte es kein Problem sein. Der Fehler tritt aber auch auf, wenn ich
1
For i = 0 To memory
2
   dateifeld(i) = "test" 
3
Next

aufrufe. Also sollte die Ursache schon im Index von "Dateifeld" liegen.
Lesenswert?
• ▲
▼
Kannst du ein minimales Programm posten, in dem das Problem auftritt? 
Und zwar komplett.
Ich habe gerade ein einen Button und eine Textbox in eine Form plaziert 
und dann folgendes programmiert:
1
Public Class Form1
2
    Dim dateifeld(5000) As String
3

4
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
5
        For i = 0 To 5000
6
            dateifeld(i) = i.ToString()
7
        Next
8
        For i = 4990 To 4999
9
            TextBox1.AppendText(dateifeld(i) & " ")
10
        Next
11
    End Sub
12
End Class
und das läuft, wie erwartet.
Gast
Lesenswert?
• ▲
▼
@ all

Danke allen für die Mithilfe. Das Programm läuft.

LÖSUNG: Ich habe "Dateifeld" im gesamten Programm in "Dateifeld1" 
umgenannt und jetzt läuft es so wie erwartet.

In einer früheren Programmversion hatte ich das "Dateifeld" mit 255 
dimensioniert und später gemerkt, dass der Wert für die erwartete 
Datenmenge etwas unterdimensioniert war. Also auf 5000 geändert. Aus 
irgendeinen nicht nachvollziehbaren Grund arbeitet VB nach wie vor mit 
dem alten Wert 255, obwohl mit 5000 dimensioniert. Auch ein ReDim 
funktionierte nicht wie gewünscht. Irgendwie scheint VB da einen 
komischen Bug zu haben. Auf jeden Fall spielt das Programm jetzt und ich 
habe wieder ein paar graue Haare mehr.

Allen ein schönes WE noch.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 15 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.