Binärdatei auslesen



  • Hallo

    Folgendes Problem: Unser Prof. auf der Uni hat uns ein Übungsbsp. gegeben und irgendwie passt da was mit der Angabe nicht bzw. ich kenn mich nicht aus.

    Also gefragt ist: Eine Binärdatei wird dem C Programm übergeben. Die Binärdatei enthält dabei definierte Parameter (Header und Content Daten - sind alle bekannt).
    Das C Programm sollte nun diese Binärdatein auslesen und weiterverarbeiten.
    Einzige Angabe zum Input: "Die zu öffnende Binärdatei wird dem Pogramm mittels Kommandozeilenparameter übergehen. Es sind keine weiteren Eingaben vorgesehen. -- In der Binärdatei werden eine beliebige Anzahl von Datensätzen gespeichert. Jeder Datensatz besteht aus einem Header mit fixer Länge und einem Content mit variabler Länge."
    Wie gesagt der Header besteht aus vier fixen Datensätzen und der Content aus 2 variable Datensätze.
    Nur ist jetzt die Frage wie diese Daten in dieser Binärdatei vorliegen? Gibt es hier ein bestimmtes Muster das mir nicht bekannt ist?

    Bitte um Hilfe 👍

    Danke



  • Hat er auch die Typen verraten? ALso int oder short oder char bei den vier fixen datensätzen?
    Oder war das nur eine Zahl aus vier Bytes, die die Länge des Datenfeldes ansagt?
    So, wie das da steht, sind die Informationen zu dürftig.



  • Ja die Datentypen sind auch gennant:
    Folgendermaßen:

    Header
    value1 -- unsigned int
    value2 -- double
    value3 -- double
    value4 -- unsigned int

    Content
    variable1 -- C-String
    variable2 -- C-String



  • Geise1 schrieb:

    Header
    value1 -- unsigned int
    value2 -- double
    value3 -- double
    value4 -- unsigned int

    Content
    variable1 -- C-String
    variable2 -- C-String

    Jetzt wird's klar.
    Entweder die vier values mit jeweils read (fread, ReadFile, was nehmt Ihr nochmal?) einlesen. Oder eine struct Header bauen, die die vier Werte drin hat und alle auf einmal liest ~(dann aber zur Sicherheit das Padding ausmachen)~. Und dann mit malloc Speicher anlegen für die beiden Strings und auch mit read einlesen.



  • Danke

    Ja wir müssen einen struct Header bauen.
    Also kommen die Daten so nacheinander rein oder wie?
    Wenn ich die Binärdatei mit mit cat Befehl einbinde, kann mein Programm gleich mit dem einlesen vom value1 anfangen - oder?



  • Geise1 schrieb:

    Danke

    Ja wir müssen einen struct Header bauen.
    Also kommen die Daten so nacheinander rein oder wie?
    Wenn ich die Binärdatei mit mit cat Befehl einbinde, kann mein Programm gleich mit dem einlesen vom value1 anfangen - oder?

    Ich denke, Du bekommst als Kommandozeilenargument nur den Dateinamen, und mußt die Datei dann selber mit open/fopen öffnen. Oder?



  • Und wie öffne ich das mit fopen?

    Ok wie fopen funktioniert weiß ich ja aber wie sag ich fopen, dass er die Datei von der Kommandozeile übernehmen sollte?



  • Gesetzt dem Fall, dass der Dateiname das 1. Argument ist:

    //__Headers__
    int main(int argc, char **argv)
    {
        //...
        fopen(argv[1] /*Dateiname*/, /*weitere Argumente von fopen*/);
        //...
    }
    


  • Geise1 schrieb:

    Also kommen die Daten so nacheinander rein oder wie?

    Ja. Interpretieren und in ein struct-Array verpacken musst du sie selbst.
    Wenn Produzent und Nutzer der Datei mit dem gleichen Compiler- und Umgebungssystem arbeiten, solltest du auch keine Probleme mit Bytefolgen haben.

    Geise1 schrieb:

    Wenn ich die Binärdatei mit mit cat Befehl einbinde, kann mein Programm gleich mit dem einlesen vom value1 anfangen - oder?

    cat ist ein betriebssystemabhängiger Befehl, den du sicher nicht benutzen sollst.

    Definiere deine Datenstruktur und entwerfe ein Muster für den Programmablauf (Top-Down). Und besorge dir relevante Testdaten.



  • Wutz schrieb:

    und entwerfe ein Muster für den Programmablauf (Top-Down).

    Wobei Top-Down nicht wirklich sein muß.


Anmelden zum Antworten