Forum: PC-Programmierung VB2008: Eindimensionales Array nur 256 Werte?


von Jens (Gast)


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.

von Gunnar (Gast)


Lesenswert?

Du definierst ein eindimensionales Feld,
greifst aber mit

"...Datenfeld(i, 0)..."

zweidimensional auf dieses zu?

von Uwe N. (ulegan)


Lesenswert?

Das dürfte eher an der Deklaration von Datenfeld() liegen.
Heist die etwa so ungefähr
Dim Datenfeld(256,5) As String   ?

von Gunnar (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!

von Jens (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.

von Uwe N. (ulegan)


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.

von Jens (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.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Jens schrieb:
> Irgendwie scheint VB da einen
> komischen Bug zu haben.

Den wird es nicht haben, das wird ein Typo in Deinem Sourcecode sein.

Du solltest besser mit den Optionen explicit und strict arbeiten, 
und obendrein mal sehen, was infer macht.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.