Text zeilenweise lesen - was stimmt an meinem Code nicht ?



  • zeig doch die Fehlercodes einfach mal an. Das würde enorm helfen beim beantworten der Frage 🙄
    wmfrs <-- lesen!

    while()
    

    das geht so nicht. Entweder while(1) oder for(;; ) für endlos schleifen. Aber beachte, dass du irgend wann die Schleife beenden musst, wenn nichts mehr in der Datei steht.

    input_file.close();
        output_file.close();
    

    lass das weg, dass passiert automatisch

    btw.
    musst du in C++ nicht alle Variablen am Anfang eines Scopes definieren. Definier die am besten immer so spät wie möglich

    std::getline und std::string helfen dir wahrscheinlich bei deiner Aufgabe mehr, als das C-String-gefummel

    fstream input_file(filePathOpen,ios::in);//open file for read access
        fstream output_file(filePathSave,ios::out);//open file for write access
    

    warum übergibst du filePathOpen/filePathSave nicht als Parameter? Das sind doch nicht etwas globale Variablen?

    http://tutorial.schornboeck.net/inhalt.htm <-- auch lesen!



  • @kingruedi: auch auf die Gefahr hin, daß ich Dich wiederhole (sorry)

    @G.Ben: was ist den bei Dir 'filePathOpen'??
    vielleicht hilft dir das:

    void manageLDIF(){ 
        char buffer[2000]; 
        buffer[0] = 12; 
        bool firstFlag = false; 
        char * filePathOpen="H:/outf/open.txt",
    		 * filePathSave="H:/outf/save.txt";
    
        fstream input_file(filePathOpen,ios::in);//open file for read access 
    	/*warum nicht gleich:
    	ifstream input_file(filePathOpen);
    	*/
        fstream output_file(filePathSave,ios::out);//open file for write access         
    	/*warum nicht gleich:
    	ofstream input_file(filePathSave);
    	*/
        if (firstFlag == false){ 
            firstFlag = true; 
            input_file.getline(buffer,2000); 
            //manageLine(buffer); 
        }//process first line 
    
        while(0/*hier fehlt doch was*/){ 
            input_file.getline(buffer,2000);               
        }//process rest of file       
    
        //input_file.close();	//ich glaube man braucht kein explizites close() bei fstreams
        //output_file.close();     
    }//manageLDIF - main file process method
    


  • Danke für eure Antworten.
    Ich kann keine explizite Fehlermeldung angeben, weil es keine gibt.
    Das Problem is das wenn ich kompilieren, DEVC++ die Header-Datei fstream.h öffnen und mit diese Zeile makiert ohne nähere Erklärung:

    include "backward_warning.h"
    

    Daher kann ich den Fehler auch nicht näher eingrenzen. Das mit der while-schleife stimmt natürlich, das kommt aber erst später.
    Und ja die File-Vars sind global, wobei das aber kein Problem sein dürfte.

    Ich werd mir mal die Änderungen anschaun und ausprobieren.

    Danke nochmal,

    G.Ben





  • Vielen dank für diesen Tip, er hat meine Probleme gelöst !!
    Ausserdem hab ich nun die manageLDIF-Methode nochmal umgeschrieben.

    Sieht nun so aus:

    void manageLDIF(char filePathOpen[1024], char filePathSave[1024]){
        char buffer[2000];
    
        ifstream input_file(filePathOpen);//open file for read access
        ofstream output_file(filePathSave);//open file for write access        
    
        while (input_file.eof()){
            input_file.getline(buffer,2000);
            manageLine(buffer);
        }//process file        
    }//manageLDIF - main file process method
    

    Danke an euch,

    gruß G.Ben.



  • warum char foo[1024] und nicht char *foo

    es macht ja keinen Sinn so die Pfade zu beschränken.

    btw. std::string solltest du dir angucken und schau dir nochmal deine while Bedingung an



  • ⚠ wie wäre es mit

    while( !(input_file.eof()) ){...}
    

    oder noch besser:

    while( input_file.getline(buffer,2000) ){...}
    


  • Okay ihr habt natürlich recht was die while-schleife angeht 🙂

    Wenn ich ehrlich bin bin ich noch nicht so sicher im rumpointern. Deswegen hab ich mir einfach ein char[] mit fester größe genommen.

    Könnt ihr mir vielleicht ein kleines Beispiel zeigen ?





  • Beispiel wofür?
    meinst Du vielleicht das:

    void manageLDIF(char * filePathOpen, char * filePathSave){...}
    

    und der Rest bleibt genauso



  • Okay, ich habs nun mit char* gemacht. Das einzige Problem das ich bei der Lösung sehe, is das der Kompiler einem nicht mehr eine Fehlermeldung schmeißt wenn man z.B. den Bereich des Arrays verlasst.

    Aber da muss man wohl einfach aufpassen.
    Danke,

    CU


Anmelden zum Antworten