Problem: string aus Datei lesen



  • Hallo,

    ich habe folgendes Programm:

    #include<iostream>
    #include<string>
    #include<fstream>
    #include<sstream>
    using namespace std;
    
    string testfkt(string param){
    stringstream test;
    test <<
    	"  BlaBlaBla\n"
    	"     BlaBlaBla\n"
    	"        Bla = "<<param<<"\n"
    	"        BlaBlaBla\n"
    	"     BlaBlaBla\n"
    	"  BlaBlaBla\n"
    	;
    	return test.str();
    }
    
    int main () {
    
    string maintest;
    maintest = testfkt("jajaja");
    cout << maintest << endl;
    }
    

    Hier wird mir der obere Text mit dem jajaja auch ausgegeben. Jetzt soll das ganze aber auch funktionieren, wenn der Text aus einer anderen Datei gelesen wird.

    Also folgendermaßen: In einer anderen Datei steht folgendes:

    string fkt(string param1, string param2){
    	stringstream test2;
    	test2 <<
    		"  BlaBlaBla\n"
    		"     BlaBlaBla\n"
    		"        Bla = "<<param1<<"\n"
    		"        BlaBlaBla\n"
    		"     BlaBlaBla: "<<param2<<"\n"
    		"  BlaBlaBla\n"
    		;
    		return test2.str();
    	}
    

    Nun soll in der eigentichen Datei genau diese Datei eingelesen werden:

    So wird ja die komplette Datei eingelesen:

    ifstream fin;
    fin.open("Dateiname");
    cout << fin.rdbuf();
    fin.close();
    

    aber ich möchte ja nur den Text selbst haben:

    stringstream sstr;
    ifstream fin;
    fin.open("Dateiname");
    sstr = string fkt("ja", "nein");
    cout << sstr << endl;
    fin.close();
    

    Dabei kommt die Fehlermeldung:
    "syntax error before '(' token ( in der Zeile: sstr = string fkt("ja", "nein"); )"

    Ich bin noch nicht so geübt in C++ und komme grad nicht wirklich weiter.

    Zusatz:
    Die Texte sollen nicht ausgegeben werden, sondern nacheinander zusammen in eine neue Datei geschrieben werden.
    Funktioniert das dann so:

    ofstream FOUT("Dateiname");
    FOUT << maintest;
    FOUT << sstr;
    FOUT.close();
    

    Ich würde mich freuen, wenn mir jemand weiterhelfen könnte.



  • Das heißt, du möchtest den Inhalt von Datei2 zur Laufzeit nachladen und dann als C++ Code interpretiert haben, sehe ich das richtig? Das geht in C++ nicht, da mußt du den kompletten Code vor der Verwendung in Maschinensprache übersetzt und (weitgehend) zu einem Programm zusammengefasst haben.

    Wenn du die Funktion bereits zur Compilezeit zur Verfügung hast, könntest du die "andere Datei" per #include einbinden - und dann die Funktion normal per 'sstr=fkt("ja","nein");' verwenden, wenn du sie erst zur Laufzeit anhängen kannst, such dir eine Scriptsprache.



  • Es soll zum Schluss eine Datei herauskommen, in der einfach nur der komplette Text steht (also von der Datei selbst und den anderen Dateien zusammen).

    Das geht so also nicht?



  • OK, da hatte mich jetzt verwirrt, daß in der "anderen Datei" auch C++ Code steht. Wenn du nur den Inhalt verschiedener Dateien zusammenkopieren willst, kannst du sie einfach nacheinander einlesen, in die Zieldatei schreiben und wieder schließen:

    ofstream fout("Ziel.txt");
    ifstream in1(...),in2(...);
    fout<<in1.rdbuf()<<in2.rdbuf();
    

    (eventuell noch etwas feiner strukturiert, aber das Prinzip sollte klar sein)



  • Bis jetzt steht in der anderen Datei auch noch C++ Code.

    Die Zieldatei setzt sich ja aus mehreren solchen Dateien zusammen. Wenn jetzt rein nur der Text in der Datei steht, funktioniert es. Da aber in einigen Dateien auch Variablen drinstehen und der jeweilige Text durch if-else Bedingungen ausgewählt werden soll, hab ich eben C++ Code genommen.

    Wie kann ich denn sonst eine Datei mit Variablen einlesen?



  • In C++ gar nicht - außer du baust dir einen Parser, der den Dateiinhalt interpretiert. In Scriptsprachen bist du da vermutlich vesser aufgehoben (aber das ist nicht mein Fachgebiet).


Anmelden zum Antworten