Bastel gerade an einem größeren Projekt und habe mir eine Laderoutine
gebastelt, die mehrere Elemente mit einer großen Struktur nacheinander
aus einer Datei einläd.
Um die Struktur einzulesen, benutze ich folgende allgemein gehaltene Routine:
Code: Alles auswählen
Procedure ReadStructure(FileID.l, *Var.AllTypes, *Struc.BYTE)
Protected length.l
While *Struc\b
Select *Struc\b
Case 'b' : *Var\b = ReadByte(FileID) : *Var + 1
Case 'c' : *Var\c = ReadCharacter(FileID) : *Var + 1
Case 'w' : *Var\w = ReadWord(FileID) : *Var + 2
Case 'l' : *Var\l = ReadLong(FileID) : *Var + 4
Case 'f' : *Var\f = ReadFloat(FileID) : *Var + 4
Case 'd' : *Var\d = ReadDouble(FileID) : *Var + 8
Case 'q' : *Var\q = ReadQuad(FileID) : *Var + 8
Case 's'
length = ReadLong(FileID)
*Var\s = Space(length)
ReadData(FileID, @*Var\s, length)
*Var + 4
EndSelect
*Struc + 1
Wend
EndProcedure
Code: Alles auswählen
Procedure Sat_Load(File.s, Add.l = 0)
Protected FileID.l
If Add
LastElement(Satellite())
Else
ClearList(Satellite())
EndIf
FileID = ReadFile(#PB_Any, File)
If FileID
a = ReadLong(FileID)
While Eof(FileID) = 0 And a
If AddElement(Satellite())
ReadStructure(FileID, @Satellite(), @Struc_Satellite)
a - 1
EndIf
Wend
CloseFile(FileID)
EndIf
EndProcedure
einigen Datensätzen, ca. 8 bis 10, zu einem Fehler und der Debugger
meldet "Invalid Memory Access". Kommentiere ich die nachfolgende Zeile
mit [c]ReadStructure(blabla)[/c] aus, funktioniert alles wunderbar, es
werden allerdings keine Daten in die Struktur eingelesen.
Bevor ich jetzt ein lauffähiges Beispiel poste, würde ich gerne wissen, ob
es mit [c]AddElement()[/c] schon ähnliche Probleme in der Beta gibt oder
nicht.
Danke!