Brauche hilfe beim Klassendesign



  • Hallo,

    ich brauche mal eure Hilfe. Und zwar geht es darum das ich nicht genau weiß wie gut ich die Klasse gestalten soll.

    Also ich habe 3 Dateien die in einer Verbindung stehen.

    Erstens die Index-Datei sie enthält Strings die 20 Bytes groß sind und ein Offset für die eigentliche Datendatei.

    In der Indexdatei stehen nur solche Offsets untereinander z. B. dateiname.txt 234554

    natürlich in hex, da sieht das dann so ungefähr aus:

    64656275672E7478740000000000000000000000745F5D01
    

    Erst der Dateiname dann ein 4 Byte Offset also sprich ein Unsigned Long Int.

    Da stehen jetzt sehr viele solche Daten drinnen. die Anzahl steht am Anfang der Datei als WORD.

    Nun gibt es noch die zweite Datei. Die sogenannte CHK Datei. Diese besteht auch wieder aus vielen Daten.

    Hier mal die Beschreibung:

    Das erste WORD der Datei beschreibt die Version dann kommt ein 4 Byte Unsigned Integer der die Anzahl beschreibt. Danach kommen 8 Byte Timestamps und zwar genausoviele wie die Anzahl das beschrieben hat. Hier mal ein Beispiel:

    02000D000000001E6688CAA7C001
    

    Und dann gibt es noch die eigentliche Datendatei. Diese enthält die genannten Daten in der Indexdatei und man findet Sie an den entsprechenden Offsets der Datei.

    Soviel zur Einleitung.

    Jetzt habe ich aber ein Problem ich möchte diese Daten möglichst effizient verarbeiten. Ich habe mit gedacht das sich eine STD::List dafür sehr gut eignen könnte da ich auch Dateien anfügen und ersetzen möchte. Jedoch hab ich ein Problem das ich nicht genau weiß wie ich die Klassen für das am besten setze.

    Kann mir jemand beim Klassendesign helfen? Ich wäre euch dafür wirklich sehr dankbar.

    Gruß und Danke

    Schedl



  • Ich nehme mal an, du willst mit C++ programmieren (wegen std::list)?

    Du mußt dir einfach nur eine geeignete Struktur (bzw. Klasse) überlegen, welche deine Daten wiederspiegelt.
    Am besten fang erstmal so an, daß du jede Datei einzeln abbildest.
    (Ich habe leider noch nicht ganz verstanden, was die CHK-Datei beinhaltet.)

    Dann schreibst du dir jeweils eine Einlese- und eine Ausgaberoutine (am besten mittels Überladen der Streaming-Operatoren << und >>).

    Als übergeordnete Instanz erzeugst du dir dann eine Klasse, welche dann die anderen Daten in geeignete Container (z.B. std::list oder std::vector) speichert.

    Am besten, du entwirfst jetzt erst mal einen Rohentwurf der Klassen und bei weiteren Fragen kannst du es ja dann mal hier reinposten.



  • Hallo nochmal,

    ich hab jetzt noch mit einem befreundeten Programmierer gesprochen wie er das machen würde, jedoch hab ich nur Bahnhof verstanden.

    Ich zittiere mal was er sagte:

    Ich würde ein Klasse für "Volumes" schreiben (IMG/IND/CHK-Verwaltung) und diese würde Instanzen/Referenzen einer eigenen "Volume-Item"-Klasse herausgeben (read only). "Volume Item" = "Datei" mit Daten (IMG) + Eigenschaften (IMG/IND/CHK)

    Das ist fast das selbe was du sagtest aber ich verstehe das nicht so ganz wie das funktionieren soll.

    Wäre jemand hier bitte so nett und würde mir das etwas besser erklären? Ich hatte bislang immer einfachere klassen und noch keine Dateiklassen geschrieben bin dort also total unerfahren.

    Wäre euch wirklich sehr dankbar für eine genauere Ausführung.

    Also nochmal:

    IND - Indexdatei - enhält Dateinamen und Offsets
    CHK - Chancedatei - enthält Timestamp der Datei (Erstelldatum und Zeit)
    IMG - Imagedatei - enthält die Daten sequentiell hintereinander

    Bitte helft mir ich wäre euch dafür wirklich sehr dankbar

    Gruß und Danke

    Schedl


Anmelden zum Antworten