www.mikrocontroller.net

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


Autor: Jens (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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:
 Dim dateifeld(5000) As String

Über eine FOR-NEXT-Schleife sollen dem Array Werte zugewiesen werden:
For i = 0 To memory
dateifeld(i) = Datenfeld(i, 0) & ";" & Datenfeld(i, 1) & ";" & Datenfeld(i, 4) & ";" & Datenfeld(i, 2) & ";" & Datenfeld(i, 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
 File.WriteAllLines(sfd.FileName, dateifeld) 

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

Danke schon mal.

Autor: Gunnar (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du definierst ein eindimensionales Feld,
greifst aber mit

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

zweidimensional auf dieses zu?

Autor: Uwe Nagel (ulegan)
Datum:

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

Autor: Gunnar (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: Jens (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das "Datenfeld" ist zweidimensional und wird so dimensioniert:
 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
For i = 0 To memory
   dateifeld(i) = "test" 
Next 

aufrufe. Also sollte die Ursache schon im Index von "Dateifeld" liegen.

Autor: Uwe Nagel (ulegan)
Datum:

Bewertung
0 lesenswert
nicht 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:
Public Class Form1
    Dim dateifeld(5000) As String

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        For i = 0 To 5000
            dateifeld(i) = i.ToString()
        Next
        For i = 4990 To 4999
            TextBox1.AppendText(dateifeld(i) & " ")
        Next
    End Sub
End Class
und das läuft, wie erwartet.

Autor: Jens (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.