Text Datei auslesen und einzeln speichern



  • Ich habe eine txt Datei und will diese auslesen.
    In ihr stehen 26 zahl von 1 bis 26 in zeile 1-26.
    ich will diese nun einzeln auslesen und mache das so:

    if (codierrichtung == 2) // decoding
    {
    
    cin.get();
    ifstream file;
                string fileName = "" + partition + ":\\schlüssel.txt";
                file.open(fileName.c_str(), ios::in | ios::binary); // oeffen im Binaer-Modus
                if(file)
                {
                            file.seekg(0, ios::end); // zum Ende Datei springen
                            long fileSize = file.tellg(); // Dateigroesse auslesen
                            file.seekg(0); // Zurueck zum Anfang springen
                            char *text = new char[fileSize]; // Speicher fuer Text anlegen
                            long lines = 0;
                            char *schluesselinhalt[27];
                            for (;lines <= 26;)
                            { 
                            lines = lines + 1;
                            file.read(schluesselinhalt[lines], 1);
                            }
                            file.close();
                            cout << text;
                            delete text; // Speicher aufraeumen
                }
                else
                {
                            cout << "Fehler!";
                }
                cin.get();
    } // endif decoding
        return EXIT_SUCCESS;
    }
    

    Warum geht das denn nicht ? --> Er stürzt dabei ab (kein compiler Error)



  • Wenn du die Array-Version von new - also new[] verwendest, musst du den Speicher mit delete[] und nicht mit delete wieder freigeben.

    Beim nächsten Mal wäre es ausserdem hilfreich, Laufzeitfehler und Position des Absturzes anzugeben.



  • Er stürzt immer bei der for schleife ab (konnte es soweit eingrenzen)
    und ich weiß nicht ganz genau was du meinst ich bin im moment sehr schwer von begriff.
    schon etwas spät 🙂 😮



  • new []
    delete []

    http://www.informatik-gruppe.de/projekte/dateien/datei_ld_speichern.htm

    Schlimm das sowas in einem Tutorial vorkommt. 🙄



  • long lines = 0;
    string inhalt[29];
    int zeile = 0;
    
                ifstream file;
                string fileName = partition + ":\\schlüssel.txt";
                int alllines = 0;
    
       for (;alllines<26;)
       {
           alllines = alllines + 1;
    
                zeile = zeile + 1;
                file.open(fileName.c_str());
                if(file)
                {
                            string text; // Haupttext
                            int zeilen = 0;
                            while(!file.eof())
                            {
                                        string txt; // Buffer
                                        getline(file, txt);
                                        text = txt + "\n";
                                        zeilen++;
                                        if(zeile == zeilen) // gesuchte Zeile erreicht
                                        {
                                                    cout << text;
                                                    break; // Zeile gefunden, Einlesen abbrechen
                                        }
                                        lines = lines + 1;
                                        inhalt[lines] = text;
                            }
                            file.close();
    
                }
                else
                {
                            cout << "Fehler!";
                } //endelse
                }
    

    kann mir das jemand korigieren ich versteh einfach nicht was hier falsch ist...
    möglicherweise der selbe fehler, wie zu beginn ?
    er gibt noch acht zeilen aus und dann will er nicht mehr.
    wenn ich die zeile die er ausgeben soll zuerst immer wieder angebe dann macht er es aber automatisiert geht es nicht mehr! 😕



  • bitte entschuldigt das doppelposting, aber das ist eine andere frage.
    warum muss ich den array eine größe von mehr als 200 verpassen (200 geht nicht 2000 geht)

    string inhalt[2000];
    

    der rest ist wie oben. 😕



  • Unabhängig von deiner Frage, empfehle ich dir
    std::vector<std::string>; zu verwenden. Da ersparst du dir das rumgeteste wieviel Platz du brauchst, da machst du nur ein std::vector<std::string>.push_back(); und der vector regelt das speichermanagment für dich.

    std::vector<T>.push_back(T)



  • Die for -Schleife ist unnoetig, dafuer gibts ja while ...
    Ausserdem oeffnest du die Datei bei jedem neuen Schleifendurchgang neu, vielleicht liegt auch hier der Fehler. Die Datei solltest du vor Schleifenbeginn oeffnen oder zumindest am Ende der Schleife ein close() und clear() hinzufuegen.
    Ein std::vector wuerde ausserdem vieles um einiges einfacher machen...
    Ausserdem versteh ich nicht ganz was du vorhast... Wenn es dir nur um Zahlen (in Form von einer Zeichenkette) geht, dann gaebe es da eine einfache Loesung:

    ifstream inp("datei.txt");
    if (!inp) return -1;
    std::string lines[26];  // Array, wenn du vector noch nicht kennst...
    size_t zaehler = 0;
    while (!inp.eof())
    {
      getline(inp, lines[zaehler++]);
    }
    

    Gruss
    Cartman



  • ok ... ich glaube ich hätte das vorher in einem Forum mal checken sollen.
    (wenn man mal bedenkt das das ca. 20 zeilen kürzer ist 🙄 und der rest des programms möglicherweise auch verkompliziert ist)
    ach und noch dazu wie ging das noch mit string --> Integer ?
    Ich will jetzt nähmlich die zahlen (string) in einen integer packen.
    an dem auslesen würde ich gerne (jetzt wo er endlich geht) nichts ändern.
    nur den string zum integer würde ich gerne machen, zum beispiel:

    string strng;
    int integer;
    // und jetzt umwangeln und strng in integer packen, aber wie ?
    


  • std::stringstream s;
    std::string zahl = "2";
    
    int z = 0;
    s << zahl;
    s >> z;
    
    std::cout << z;
    

    Im FAQ wäre das auch gestanden..



  • Meine Güte, Tim06TR, liest du eigentlich auch, was man dir antwortet? Schau mal hier, da wurden dir bereits Beispiele gebracht. 🙄



  • ja entschuldigung, da hab ich nicht dran gedacht. 😞


Anmelden zum Antworten