Anfänger: Text Datei Modifizieren / Lesen / Schreiben



  • Hallo liebes forum 😛

    erstmal eines vorweg, c++ ist für mich total neu ich habe da so gut wie keine erfahrung:

    ich möchte gerne ein kleines programm schreiben was ich mit parameter angabe starten kann und dieses programm je nach parameter eine zeile von der textdatei löscht bzw hinzufügt, hatte mir das so vorgestellt:

    der inhalt der textdatei:
    global AdminList={
    {name="",cl_guid="1234abc",admin_level=6,admin_pw="",},
    {name="",cl_guid="1234abc",admin_level=6,admin_pw="",},
    {name="",cl_guid="1234abc",admin_level=6,admin_pw="",},
    };

    zum hinzufügen
    ./testprogramm add name 734575884957987 6 abcde

    zum entfernen
    ./testprogramm remove name 734575884957987 6 abcde

    ich habe mich auch schon durch mehere tutorials und so weiter durchgelesen aber mir fehlt es noch ein wenig an der logic.
    stimmt es, dass ich zuerst die datei kommplett einlesen dann den string modifiziere und dann die datei zurückschreibe muss ? oder gibt es ein möglichkeit die datei ohne einlesen / zurückschreiben , direkt ändern kann ?
    und welche funktionen / befehle brauche ich alle um das obige programm zuerstellen ?

    vielen dank an alle
    gruss ren22



  • ren22 schrieb:

    stimmt es, dass ich zuerst die datei kommplett einlesen dann den string modifiziere und dann die datei zurückschreibe muss ?

    Text anhängen zB. geht auch so, zum sonstigen bearbeiten wirst Du einlesen, modifizieren, neu rausschreiben müssen.

    und welche funktionen / befehle brauche ich alle um das obige programm zuerstellen ?

    Kaum irgendwas, was Du nicht hier drin findest:
    http://www.c-plusplus.net/forum/39469



  • Dieser Thread wurde von Moderator/in nman aus dem Forum Linux/Unix in das Forum C++ (auch C++0x) verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • das ist mein erstes wenn man es nennen darf "programm" in c++ 😛

    bin für verbesserungs vorschläge gerne zu ohr 😛

    ich habe erstmal auf prüfungen verzichtet soweit es geht es soll ja erstmal mal nur einfügen und löschen .. der rest kommt dann später 😛

    #include <string>
    #include <iostream>
    #include <fstream>
    #include <stdio.h>
    
    using namespace std;
    
    int main(int argc, char *argv[]) {
    //Anzahl der Parameter ausgeben
        const std::string stradd = "add";
        const std::string strremove = "remove";
        string s;
    
        //Jeden einzelnen Übergabeparameter ausgeben
        for (int i=0; i < argc; i++) {
            if (argc<2){
                cout << "try --help for more info" << endl;
                return 0;
            }
            //else {
            if (stradd == argv[i]) {
                cout << "adding values..." << endl;
                ifstream in("Neelix_tables.gm"); // Open for reading
                ofstream out("Neelix_tables2.gm"); // Open for writing
                while(getline(in, s)) // Discards newline char
    
                if (s.find ("//Admins") != string::npos){
                    out << "//Admins" << "\n";
                    out << "" << "\n";
                    out << "{name=\"" <<argv[2]<< "\",cl_guid=\"" <<argv[3]<< "\",admin_level=" <<argv[4]<< ",admin_pw=\"" <<argv[5]<< "\",}," << "\n"; // ... must add it back
                    }
                else{
                        out << s << endl; // ... must add it back
                    }
    
            }
            if (strremove == argv[i]) {
                cout << "adding values..." << endl;
                ifstream in("Neelix_tables.gm"); // Open for reading
                ofstream out("Neelix_tables2.gm"); // Open for writing
                while(getline(in, s)) // Discards newline char
    
                if (s.find (argv[2]) != string::npos){
                    out << "" ;//<< "\n";
                    //out << "" << "\n";
                    //out << "{name=\"" <<argv[2]<< "\",cl_guid=\"" <<argv[3]<< "\",admin_level=" <<argv[4]<< ",admin_pw=\"" <<argv[5]<< "\",}," << "\n"; // ... must add it back
                    }
                else{
                        out << s << endl; // ... must add it back
                    }
    
            }
                //}
            }
            ifstream FileInCopy("Neelix_tables2.gm", ios::binary);
    
            // Zieldatei
            ofstream FileOutCopy("Neelix_tables.gm", ios::binary);
    
            if (FileInCopy)
                FileOutCopy << FileInCopy.rdbuf();
              if( remove( "Neelix_tables2.gm" ) != 0 )
                perror( "Error deleting file" );
              else
                puts( "File successfully deleted" );
              return 0;
    
    }
    

    die textdatei sieht so aus:

    /*///////////////////////////////////////////////////////////////////////////////////////////////////////
    AdminList:
    *////////////////////////////////////////////////////////////////////////////////////////////////////////
    global AdminList={
    //Admins
    {name="Arthur Dent",cl_guid="1234abc",admin_level=3,admin_pw="",},
    
    //Friend(s)
    {name="TheGamer",  cl_guid="1234abc",admin_level=1,admin_pw="",},
    };
    

    danke für eure hilfe
    gruss ren22


Anmelden zum Antworten