C++ binäre datei lesen in 2d array



  • Hallo
    ich habe ein String-2d-array tab[300][30] in eine datei geschrieben.
    nun will ich das wieder lesen (in die selbe 2d-string-variable), ich krieg es aber einfach nicht hin 😞
    (hab auch schon viel gegoogelt etc. es kommen immer fehlermeldungen/abstürze, bin halt noch anfänger^^)
    Danke für Hilfe



  • Wie hast du die Datei denn beschrieben? Die Wahrscheinlichkeit ist hoch, dass das nicht so funktioniert, wie du dir das denkst. Der üblichere Weg wäre es, einfach den Text in die Datei zu schreiben. (z.B. mit operator << oder mit fwrite() + .c_str())



  • felix256 schrieb:

    binäre datei lesen

    felix256 schrieb:

    lesen (in die selbe 2d-string-variable)

    Sind es nun Binärdaten oder strings?



  • so hab ich das array in die datei geschrieben:

    string tab[300][30];
              pFile = fopen("data.dat","wb");
              fwrite(tab,1,sizeof(tab),pFile);
    

  • Mod

    felix256 schrieb:

    so hab ich das array in die datei geschrieben:

    string tab[300][30];
              pFile = fopen("data.dat","wb");
              fwrite(tab,1,sizeof(tab),pFile);
    

    Treffer, versenkt.

    Du hast da irgendwelche Verwaltungsdaten der Strings rausgeschreiben, nicht deren Inhalt. Und warum nutzt du C-Datei-I/O?

    Aber was willst du überhaupt erreichen? Warum schreibst du die Strings nicht einfach als Text raus? Oder enthalten die Strings Binärdaten, die du dann später nicht mehr vernünftig eingelesen bekommst?

    Und 9000 Strings? Das sieht mir sehr danach aus, als hättest du ein C Tutorial mit einem C++-Tutorial durcheinander geworfen und in dem C Tutorial stand char tab[300][30]; . Kann das sein?



  • SeppJ schrieb:

    felix256 schrieb:

    so hab ich das array in die datei geschrieben:

    string tab[300][30];
              pFile = fopen("data.dat","wb");
              fwrite(tab,1,sizeof(tab),pFile);
    

    Treffer, versenkt.

    Du hast da irgendwelche Verwaltungsdaten der Strings rausgeschreiben, nicht deren Inhalt. Und warum nutzt du C-Datei-I/O?

    Aber was willst du überhaupt erreichen? Warum schreibst du die Strings nicht einfach als Text raus? Oder enthalten die Strings Binärdaten, die du dann später nicht mehr vernünftig eingelesen bekommst?
    Und 9000 Strings? Das sieht mir sehr danach aus, als hättest du ein C Tutorial mit einem C++-Tutorial durcheinander geworfen und in dem C Tutorial stand char tab[300][30]; . Kann das sein?

    nein das war absicht es sollte eine tabelle von 300x30 strings(z.B.Wörter) sein
    was ich erreichen wollte: die 9000 strings in binärer Form in eine datei schreiben ("wb") und beim nächsten mal wieder lesen.

    wie würde man das denn richtig machen (fstream? nicht binär?) ?



  • Lies dir doch bitte mal diesen FAQ Artikel durch
    http://www.c-plusplus.net/forum/39469


  • Mod

    felix256 schrieb:

    wie würde man das denn richtig machen (fstream? nicht binär?) ?

    Ich glaube, du weißt gar nicht, was binär wirklich bedeutet. Ok, hier:

    string tab[300][30];
    // ...
    ofstream file("data.dat", ios::out | ios::binary); // edit: Das out und binary sind unter Windows nötig
    for(int i = 0; i < 300; ++i)
     for(int j = 0; j < 30; ++j)
      file << tab[i][j];
    

    Binärinhalt der Strings direkt in die Datei geschreiben. Guck sie dir an. Ich wette, das hast du dir anders vorgestellt. Und wieder Einlesen ist so praktisch unmöglich, wie du sehen wirst.

    Da du keine Begründung für dein Vorhaben gibst, kann man dir aber auch nicht weiter helfen. Obiges ist jedenfalls die Lösung für deine Frage.


Anmelden zum Antworten