Frage zu fstream und getline



  • Hallo alle mit einander,

    wollte euch mal um einen kleinen Rat fragen, habe folgenden Beispiel Code Ausschnitt :

    ifstream file;
    file.open("somefile");
    
    if (file)
     whiel(!file.eof()){
    
      string str;
      getline(file,str);
      /*
              MACH WAS
       */
    
        if (error){
          sleep(10);
          // Hier muss etwas stehen, womit ich
          // erreichen kann, dass er die letzte
          // Zeile noch einmal einließt.
        }
      }
    
    file.close()
    

    Wie kann mache es nun, dass er die Zeile aufs neue einließt ?

    gruß
    akoww



  • deine Frage ist etwas unverständlich...
    Falls sich die Zeile währendessen nicht verändert, kannst du dir auch vor MACH WAS eine Kopie von str anlegen.

    greetz KN4CK3R



  • akoww schrieb:

    ifstream file;
    file.open("somefile"); //braucht man nicht
    
    if (file)
     whiel(!file.eof()){ //eher schlecht, weil eof meist zu spaet ist
    
      string str;
      getline(file,str);
      /*
              MACH WAS
       */
    
        if (error){
          sleep(10); //wozu?
          // Hier muss etwas stehen, womit ich
          // erreichen kann, dass er die letzte
          // Zeile noch einmal einließt.
        }
      }
    
    file.close() //braucht man nicht
    

    Dann reduziert sich das also auf:

    ifstream file("somefile");
    
    std::string line;
    while(std::getline(file, line))
    {
      //mach was
      if (error)
      {
        //mach nochmal was mit 'line' anstatt es neu einzulesen, weil es ja schon
        //eingelesen wurd un daher bereits in 'line' enthalten ist
      }
    }
    


  • Das ist ein klarer Fall für goto!

    (oder alternativ: innere Do-while-Schleife)



  • gutu schrieb:

    Das ist ein klarer Fall für goto!

    NEIN !!!

    selsbt wenn er zurück an die stelle des einlesens springen würde, die cursor position des stream zeigt dosch schon auf das dateiende und das einlesen schlägt damit fehl. er kann höchstens immer eine kopie der zeile sofort machen und sie immer verwerfen, ausser im letzten schleifen durchlauf.

    oder, was ich dir vorschlagen würde, lies die datei zeilenweise in einen vector ein und dann kannst sooft du willst draufzugreifen, so wie du möchtest



  • Also ich wäre auch für goto. Alleine schon deshalb, weil Skym0sh0 dagegen ist.



  • ? was soll das denn?

    ich war immer deiner meinung und hab dich aufgrund deines wissens und deines alters immer geschätzt, nur im letzten thread vorn paar tagen hab ich mal was gegen dich gesagt, da du es genauso machst bei anderen. und jetzt kommst du so an?

    aber mir solls egal sein, ich muss nicht kindergarten spielen...



  • Um mal endlich die Frage zu beantworten: Nein, man kann nicht eine bestimmte Zeile erneut einlesen. Das musst du selbst basteln.
    Ich kann nur spekulieren, worum es überhaupt geht. Meine Theorie: Das Programm soll auf eine Änderung in der Datei warten, vielleicht ist das eine Log-Datei. Ich bezweifle, dass man das mit Standardmitteln hinbekommt. Man könnte das Betriebssystem bitten, einen bei Änderung der Datei zu benachrichtigen. Dann liest man sie erneut ein, stellt Änderungen fest und macht irgendwas damit.


Anmelden zum Antworten