Anzeige
Archiv - Navigation
1008to1012
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

2dimensionales Array speichern & wieder aufrufen

2dimensionales Array speichern & wieder aufrufen
18.09.2008 11:30:00
Nobi
Hallo zusammen,
ich versuche ein zweidimensionales Array (testweise 100 X 2) im Binärmodus zu speichern und wieder aufzurufen. Das Speichern klappt ohne Fehlermeldung, per debug.print habe ich auch getestet, ob die Dimensionen 100 und 2 richtig gespeichert sind (klappt auch).
Beim Aufrufen dagegen wird scheint es auf einmal ein 100 X 537133058 Array zu sein. Wie kann das sein? Weiß jemand, was da passiert ist bzw. wie ich das Programm generell dazu bringen kann, meine Matrix richtig abzuspeichern und wieder abzurufen?
Ich bin für jeden Hinweis sehr dankbar!
Viele Grüße
Nobi
Sub aufruf_SaveArray()
'Programmaufruf: ruft Sub SaveArray auf und übergibt Dateipfad und zu speicherndes Array
createMatrix
SaveArray "c:\saved arrays\Matrix.dat", Matrix
End Sub



Public Sub SaveArray(ByVal sFile As String, vArray As Variant)
' Array in Datei speichern
Dim F As Integer
Dim rowCount As Long
Dim columnCount As Integer
' Falls Datei vorhanden, Abfrage ob sie überschrieben werden soll
' ja: überschreiben, nein oder abbrechen: Programm wird abgebrochen und Array wird nicht  _
gespeichert.
If Dir$(sFile)  "" Then
Dim ja_nein
ja_nein = MsgBox("Eine Datei mit diesem Namen existiert bereits." & _
Chr(13) & Chr(13) & "Überschreiben?", 35)
Select Case ja_nein
Case vbYes
MsgBox "Datei wird überschrieben"
Case vbNo
Exit Sub
Case Else
Exit Sub
End Select
End If
' Datei im Binary-Mode öffnen
F = FreeFile
Open sFile For Binary As #F
' Anzahl Zeilen speichern
rowCount = UBound(vArray, 1)
Put #F, , rowCount
' Anzahl Teilunternehmen speichern
columnCount = UBound(vArray, 2)
Put #F, , columnCount
' Array-Elemente speichern
Put #F, , vArray
Close #F
MsgBox "Datei wurde gespeichert unter " & Chr(13) & sFile
End Sub


Sub aufruf_ReadArray()
'Programmaufruf: ruft Sub ReadArray auf und übergibt Pfad der auszulesenden Datei
Dim MyArray() As Variant
MyArray = ReadArray("c:\saved arrays\Matrix.dat")
End Sub



Public Function ReadArray(ByVal sFile As String) As Variant
' Array aus Datei einlesen
Dim F As Integer
Dim rowCount As Long
Dim columnCount As Long
Dim vArray As Variant
' Datei im BinaryMode öffnen
If Len(Dir$(sFile)) > 0 Then
F = FreeFile
Open sFile For Binary As #F
' Anzahl Zeilen lesen
Get #F, , rowCount
' Anzahl Spalten lesen
Get #F, , columnCount
' Array dimensionieren und einlesen
ReDim vArray(1 To rowCount, 1 To columnCount)
'!!! FEHLER: an dieser Stelle stoppt das Programm mit der Fehlermeldung, dass nicht genug
'Speicher vorhanden ist. Ich habe rowCount und columnCount mit debug.print getestet - rowCount
' ist 100, columnCount wird jedoch als 537133058 ausgelesen, obwohl als 2 gespeichert...
'(in Sub savearray hatte ich es genauso mit debug.print getestet, da war es korrekt 2)
Get #F, , vArray
Close #F
End If
ReadArray = vArray
MsgBox "function readarray ist durchgelaufen"
End Function


5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: 2dimensionales Array speichern & wieder aufruf
18.09.2008 11:56:46
Dieter
Hallo Nobi,
ich denke, daß es an den verschiedenen Variablentypen liegt. Die Zahl 537133058 entspricht binär
0010 0000 0000 0100 0000 0000 0000 0010.
Der Variablentyp Long sind 4 Byte. Außerdem schreibst Du den ColumnCount mit Integer, also 2 Byte.
Geschrieben werden also 0010 0000 0000 0000, aber gelesen wird o.g. Binärzahl.
Gelesen wird nach Low/High-Halbbyte, wenn ich mich richtig erinnere.
Demnach ist zwar 537133058 korrekt, weil ja 4 Byte gelesen werden, aber nicht richtig für Deine Anwendung.
Gruß
Dieter
AW: 2dimensionales Array speichern & wieder aufruf
18.09.2008 14:13:00
Nobi
Hallo Dieter,
vielen Dank für Deine schnelle Antwort! Ich habe in SaveArray die Variable ColumnCount jetzt auch als Long definiert, anstatt Integer, und jetzt wird das Array richtig abgespeichert. Super :-)
Jetzt habe ich allerdings das nächste Problem:
Die Function ReadArray funktioniert, ich komme bis MsgBox "function readarray ist durchgelaufen", aber bei der Übergabe vom Funktionswert ReadArray an die Prozedur Sub aufruf_ReadArray() an der Stelle
MyArray = ReadArray("c:\saved arrays\Matrix.dat")
erscheint jetzt eine Fehlermeldung: "Laufzeitfehler '13': Typen unverträglich"
ReDim MyArray(1 to 100, 1 to 2) vor Aufruf der Funktion habe ich schon versucht. Kannst Du mir da vielleicht auch helfen?
Vielen Dank für alle Hinweise vorab!
VG Nobi
Anzeige
AW: 2dimensionales Array speichern & wieder aufruf
18.09.2008 14:24:00
Dieter
Hallo Nobi,
wissen tue ich keine Lösung. Aber könnte es sein (würde ich zumindest probieren), daß die Pfad-Angabe statt mit einem mit zwei Backslashes geschrieben werden muß?
Ich lasse die Frage deswegen offen.
Gruß
Dieter
AW: 2dimensionales Array speichern & wieder aufruf
18.09.2008 14:36:00
Nobi
Hallo Dieter,
es lag wohl an den Klammern in Dim MyArray() As Variant, ohne Klammern geht es jetzt.
Vielen Dank für Deine Hilfe und viele Grüße!
AW: 2dimensionales Array speichern & wieder aufruf
18.09.2008 14:25:10
Nobi
Die zweite Frage hat sich schon erledigt... Es lag wohl an den Klammern in Dim MyArray() As Variant, ohne Klammern geht es jetzt. :-)
Vielen Dank nochmal für die Hilfe!

301 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige