Dateibereiche extrahieren und später wieder zurückschreiben



  • Ist es mit C++ möglich eine Routine zu schreiben die aus einer Datei einen speziellen Bereich heraussucht und in eine Textdatei speichert? Es handelt sich um eine Hex-Datei die gegen Ende eine Vielzahl von ASCII Daten enthält. Diese Daten würde ich gerne in einer Text-Datei ändern (wäre wesentlich einfacher) und später möglichst automatisch auch wieder einfügen können. Ich habe bisher leider wenig bis keine Ahnung von C++ und würde mich freuen wenn mir hier jemand helfen könnte oder mir vielleicht sogar ein Beispiel erstellen könnte (was noch besser wäre). Ich versuche mich gerade durch ein Tutorial zu quälen und hoffe, dass ich nach und nach dahinter komme... 🙄 .

    So beginnt z.B. der Datenbereich den ich extrahieren möchte (Die Position ist immer fast am Dateiende, variiert aber da die Größe der Datei unterschiedlich sein kann):
    http://www.westie-net.de/Space/Datenanfang.jpg

    In ein Textdokument übertragen wären das durchaus hunderte solcher Wertepaare:
    http://www.westie-net.de/Space/Daten-txt.jpg

    Ich hatte durch Zufall ein kleines Programm gefunden, das für ältere Versionen dieses Dateitypes bestimmt ist. Ich denke das es ein C++ Programm ist, nur funktionierte es leider nicht mit den neuen Dateien. Am Beispiel einer alten Datei sieht es so aus:
    http://www.westie-net.de/Space/Alt1.jpg

    Neben dem Erstellen des Textdokumentes zeigt dieses Programm den Datenbereich zusätzlich auch noch an:
    http://www.westie-net.de/Space/Alt2.jpg

    Wie gesagt, ich versuche gerade zu verstehen wie sowas funktioniert und komme nur auf Umwegen auf die Idee eines solchen Programms. Von daher bin ich im Moment eher als absolut unwissender PC-User zu betrachten... 🤡



  • du kannst die Daten binär einlesen und in einen entsprechend großen String füllen. Dann brauchst du nur noch ein Kriterium, wo der Textbereich beginnt und endet (das hängt vermutlich vom Dateiformat ab) und schon kannst du den entsprechenden SubString ausschneiden und gesondert verarbeiten.



  • Der Textteil ist recht einfach zu erkennen, da die einzelnen Datensätze des Textteils immer in "{}"-Klammern eingefasst sind. D.h. der Textteil beginnt mit dem ersten Datensatz bzw. der ersten "{" und endet mit der letzten "}" des letzten Datensatzes.



  • Dann mußt du nur aufpassen, daß in deinen vorigen Daten kein 123 (='{') auftaucht, das würde das folgende nämlich über den Haufen werfen:

    ifstream fin("dateiname.ext",ios::in|ios::binary);
    string data;char ch;
    while(fin.get(ch))
      data.append(1,ch);
    size_t pos1=data.find('{'),pos2=data.rfind('}');
    cout<<data.substr(pos1,pos2-pos1+1);
    

Anmelden zum Antworten