Textdatei Parsen



  • Ich weiß es ist für euch ein alter Hut, ich steig aber immer noch nicht durch.

    Mein Projekt:

    1. Ich öffne eine txt-datei (mit fopen) unter MFC.

    2. Ich Vergleiche die Zeilen der Textdatei mit einer Liste von Strings.

    3. Die Zeilen die die Vorgegebenen Strings enthalten werden gelöscht.

    4. Ich speicher die Datei in einer neuen Datei (mit fwrite)

    2 & 3 Bekomme ich nicht hin, bzw habe keinen Schimmer wie ich das bewerkstelligen soll.
    Schlagwörter wie CString, strtok usw helfen mir nicht, da ich es bisher nicht geschafft habe diese umzusetzen.

    Ein Codevorschlag wäre nett, falls jemand langeweile hat.

    MfG //comment

    EDIT: Das ganze ist in einer MFC SDI Anwendung untergebracht die an sich gut funktioniert, auch das Speichern der (noch leeren) datei geht reibungslos.



  • Wo genau habert es denn bei Aufgabe 2 und 3?



  • Leider haperts da komplett.

    Wo soll man anfangen, was ist am elegantesten, was nimmt die wenigste Rechenzeit in Anspruch?

    Die Textdateien können bis zu 50 MB groß sein, daher ist der letzte Punkt nicht ganz unwichtig, selbst wenn der normalfall zwischen 3 und 10 MB liegt.

    Wie lese ich die Zeilen z.B. aus und suche nach den Strings (z.b. sollen alle Zeilen gelöscht werden die mit "Select" beginnen.

    Die "gesäuberte" Datei soll dann gespeichert werden als neue Textdatei.



  • Ich würde das so machen:

    void EntferneStringsAusDatei(CString quelllPfad,CString zielPfad,&CStringArray entferne)
    {
     CStdioFile quellfile,zielfile;
     quellfile.Open(quellpfad,CFile::modeRead|CFile::modeCreate|CFile::modeNoTruncate);
    
     CString zeile,text="";
     while(quellFile.ReadString(zeile))
     {
      text += zeile;
     }
     quellFile.Close();
     for(int i =0;i < entferne.GetSize();i++)
     {
      text.Replace(entferne[i],"");
     }
     zielfile.Open(zielPfad,CFile::modeWrite|CFile::modeCreate);
     zielfile.WriteString(text);
     zielfile.Close();
    }
    


  • probiers doch mal mit den memberfunktionen von cstring, also cstring.find, cstring.left, cstring.delete
    so ungefähr könnte das funktionieren:

    datei.LineToRead(DeinCString)
    while(!DeinCString.IsEmpty())
    {  
        if(!DeinCString.Find("Select"))
            datei.LineToRead(DeinCString);
    }
    


  • Danke für eure Beiträge
    Ich werds mal probieren.

    Falls es nicht klappt muss ich halt meinen C++ Freak nerven 🙂

    Danke jedenfalls


Log in to reply