Aus Datei erste Zeile lesen und umbenennen in neue Datei



  • Hallo Community,

    habe nirgendwo mit der SuFu eine Lösung gefunden.

    Ich habe das Problem, dass ich eine Datei habe, aus der ich die erste Zeile lesen möchte. Diese Zeile soll dann später der Dateiname für die Datei sein, aus der ich die erste Zeile gelesen habe mit der Endung .txt.

    Mein Codeschnipsel liest mit Parameterübergabe des Quelldateinamens die erste Zeile und schreibt sie in einen String. Jetzt weiß ich nicht, wie ich den in der Variable

    s
    

    stehende Zeile als Dateiname in die ursprüngliche Datei übernehmen kann.

    Für Hilfe wäre ich sehr sehr dankbar.

    Gruß, Padthink

    Hier mein Code:

    int main(int argc, char *argv[])
    {
    	ifstream f;  // Datei-Handle
      	string s;
    
        f.open(argv[1], ios::in); // Öffne Datei aus Parameter
    
    	getline(f,s); //Erste Zeile der MIBFEHL Dateien auslesen
    	cout << s << endl << flush;
    	f.close();
    
    	return 0;
    }
    


  • Ist doch ganz einfach - du übergibst s (bzw. seine char*-Daten) an den fstream-Ctor oder an open():

    getline(f,s); //Erste Zeile der MIBFEHL Dateien auslesen
    ifstream data(s.c_str());
    

    PS: endl hat schon ein flush eingebaut 😉



  • int main(int argc, char *argv[])
    {
        ifstream f;  // Datei-Handle
          string s;
    
        f.open(argv[1]); // Öffne Datei aus Parameter
    
        if(getline(f,s)) //Erste Zeile der MIBFEHL Dateien auslesen
        {
           cout << s << endl;
           ofstream o(s.c_str());
           while(getline(f,s))
              o << s << endl;
        }
        else 
           cout << "Fehler aufgetreten" << endl;
        return 0;
    }
    

    close musst du nicht aufrufen passiert automatisch beim zerstören des objekts. Und ios::in an einen ifstream zu übergeben ist auch überflüssig (ifstreams lesen immer, ios::in braucht man nur für fstream)

    if(getline(f,s))
    

    hilft dir fehler zu erkennen

    BR
    Vinzenz



  • Danke für die Hilfe.

    Jetzt hat das Objekt "o" meine erste Zeile gespeichert. Wie erstelle ich jetzt einen Textdatei mit der endung .txt als Dateinamen mit dem Inhalt aus o und dem Inhalt aus der ursprünglichen Datei?

    Also folgendermaßen:

    Ich rufe auf z.B. log2name.exe TEXTDATEI.TXT

    Er liest jetzt dankenswerterweise die erste Zeile raus und soll jetzt
    folgendes tun:

    kopiere TEXTDATEI.TXT mit dem neuen Dateinamen bestehend aus dem Inhalt der ersten Zeile aus TEXTDATEI.TXT, also z.B. ZEILE1.TXT.

    Danke!!!!!! Ich versuche gerade zu lernen und das Prinzip von I/O zu verstehen und wäre echt dankbar, wenn mir jemand helfen könnte.
    Gruß,

    Padthink



  • Guck mal genau hin, evilissimo's Code macht doch genau das, was du willst.

    Zunächst wird die erste Zeile der angegebenen Datei (f) eingelesen und in s untergebracht. Danach wird o geöffnet und bekommt den Inhalt von s als Dateiname übergeben - und zuletzt wird der übrige Inhalt von f zeilenweise nach o kopiert. Was fehlt da deiner Meinung nach noch?



  • Ja genau, danke für den Tip CSTOLL. Jetzt geht es beinahe. Habe eben festgestellt, dass das Programm keinen Dateinamen schreibt, wenn Leerstellen in der ersten Zeile vorkommen.

    Wenn ich alle Leerstellen wegmache und nur noch ein Wort in der ersten Zeile lasse, dann schreibt er korrekt die Datei mit Namen der ersten Zeile. Was habe ich falsch gemacht?

    Weiterhin schreibt es keine Endung mit .txt, wie kann ich die dranhängen?

    Danke und nochmals Gruß,

    padthink


Anmelden zum Antworten