Hallo, dies ist mein erster Beitrag. Ich hoffe mal ich krieg das hin mein Problem zu schildern.
Ich entschuldige mich gleich für den Thread-Titel, ich wusste nicht wie ich mein Problem besser präzisieren sollte.
Ich bin dabei eine Datei zu parsen und verschiedene Datenstrukturen da rauszuparsen.
Hier mal ein paar Beispiele:
PlayerAmmo: byte, byte
TextMsg : byte, Pchar
Status : short
PlayerH : byte
Score : byte, byte, byte
..
...
Zusätzlich zu diesen Informationen beinhaltet jede Struktur ein TimeStamp und eine Signatur um zu erkennen um welche Datenstruktur es sich handelt.
Da es sich hier um sogenannte "GameMessages" handelt, wollte ich diese in einem record verallgemeinern und ein Array draus machen.
(Es gibt noch mehr Informationen, die ich rausparse).
Sortiert soll das nach dem Offset bzw. gleichzeitig dann auch nach dem Timestamp sein. (Messages sind konsekutiv nach dem Zeitablauf angeordnet)
Delphi-Quellcode:
const
MSG_TXT: 1;
MSG_SCORE: 2;
type
TXT_MSG = record;
ID : byte;
TXT : String;
end;
SCORE_MSG = record;
KScore: byte;
DScore: byte;
EScore: byte;
end;
.......
GAME_MESSAGE = record
OffSet : Integer;
Typ : Integer;
case Typ of
MSG_TXT: MESSAGE: TXT_MSG;
SCORE : MESSAGE: SCORE_MSG;
...
end;
var
ALL_MESSAGES: Array of GAME_MESSAGE;
Natürlich geht das so nicht mit case im record. Aber ich weiss sonst nicht wie ich die verschiedenen Messages zusammenfassen soll, weil ich ja am Ende alles sortiert nach Timestamps anzeigen will. Also muss irgendwie alles in ein großes sortierbares Array. Zudem will ich am Ende noch Messages rausfiltern können aus der Anzeige im Memo. Das würde bedeuten jedesmal wieder den Record durchzugehen (wenn ich denn erstmal eins hätte, das damit klappt) und die Messages nicht ins Memo zu kopieren, welche im Filter angegeben sind.
Egal wie ich es drehe, irgendeine Aufgabe scheint unheimlich kompliziert und mein Programm rödelt stundenlang an einem 80 MB grossen File rum um eine Art von Message da rauszuparsen und anzuzeigen. :S
Ich hoffe ihr habt eine Idee, wie ich das effizient hinbekomme.
Danke schonmal im vorraus.
Lenny