std:getline(ifstream, line) wieder von begin



  • Hi,

    ich parse eine inputDatei, diese parse ich. Dabei habe ich eine for-Schleife eingebaut, in welchem diese Datei beispilsweise n mal geparst werden soll:

    std::ifstream inStream;
      inStream.open("in.txt", std::ios_base::in);
      if( !inStream )
      {
        std::cerr << "Errror!" << std::endl;
        return;
      }  
    
      for(int loop = 0; loop < repeat; loop++)
      {
        outFStream << "New Parse .... ";
        // scan infile
        while ( std::getline(inStream, line) )
        {
            outFStream << processLine(line);
        } 
        inStream.seekg(0, std::ios_base::beg);
      }
    

    Wenn zB repeat 4 ist, soll diese Datei 4 mal abgecheckt werden. 1mal läuft es super durch.
    ich kriege es aber nicth wider an den Anfang:

    New Parse...
    irgendwelche Inhalt, ergebnis vom parsing
    irgendwelche Inhalt, ergebnis vom parsing
    irgendwelche Inhalt, ergebnis vom parsing
    irgendwelche Inhalt, ergebnis vom parsing
    irgendwelche Inhalt, ergebnis vom parsing
    irgendwelche Inhalt, ergebnis vom parsing

    New parse... New parse... New parse...

    Ist das falsch?

    inStream.seekg(0, std::ios_base::beg);
    

    Ich danek schonmal für Tipps, thnx, Lespaul



  • Nach dem letzten (erfolglosen) getline() wird wohl zusätzlich zu eofbit auch failbit gesetzt sein. In dem Fall tut seekg() garnichts mit dem Stream.



  • Swordfish schrieb:

    Nach dem letzten (erfolglosen) getline() wird wohl zusätzlich zu eofbit auch failbit gesetzt sein. In dem Fall tut seekg() garnichts mit dem Stream.

    Ahaaaa, und wie kann ich mein Problem lösen?





  • Hier? clear() zum Bleistift? Allgemein? Durch Doku lesen.



  • Weder fstream noch ifstream haben clear(). Einzige Methode mit c ist close() für fstream oder ifstream..



  • lespaul schrieb:

    Weder fstream noch ifstream haben clear(). Einzige Methode mit c ist close() für fstream oder ifstream..

    Das kann nicht sein.



  • Ist auch nicht so. 🙄



  • lespaul schrieb:

    Weder fstream noch ifstream haben clear(). Einzige Methode mit c ist close() für fstream oder ifstream..

    Die siehste nicht direkt im Header o.Ä. Das liegt daran, dass diese Methode von basic_ios vererbt wurde. Sie existiert, steht nur nicht explizit in der Schnittstelle.



  • Swordfish schrieb:

    Ist auch nicht so. 🙄

    Sorry, aber ich denke nutzte deine Zeit lieber für andere Sachen.
    Solche Kommentare sind absolut nichtssagend und eigentlich auch lästig. (Kann sein, dass du mittlerweile von so 'Anfänger'-Fragen wie meinen 'genervt' bist, dann fände ich immernoch kein Kommentar produktiver.

    Da auch das Aufrufen des clear() ohne sichtbar zu sein, da es nicht in einem Interface beschrieben wäre, zu fehlern geführt hat, habe ich das ifstream nun in die for-Schleife gepackt, sprich sie wird bei jedem durchlauf neu geööffnet und am Ende ge-closed().

    std::ifstream inStream;
      for(int loop = 0; loop < repeat; loop++)
      {
    	inStream.open("in.txt", std::ios_base::in);
    	if( !inStream )
    	{
    		std::cerr << "Errror!" << std::endl;
    		return;
    	}  
    
        outFStream << "New Parse .... ";
        // scan infile
        while ( std::getline(inStream, line) )
        {
            outFStream << processLine(line);
        }
        inStream.close();
      }
    

    Ist sicherlich weniger Elegant, aber so what..



  • lespaul schrieb:

    Swordfish schrieb:

    Ist auch nicht so. 🙄

    Sorry, aber ich denke nutzte deine Zeit lieber für andere Sachen.
    Solche Kommentare sind absolut nichtssagend und eigentlich auch lästig. (Kann sein, dass du mittlerweile von so 'Anfänger'-Fragen wie meinen 'genervt' bist, dann fände ich immernoch kein Kommentar produktiver.

    Nein, ich bin nicht von Anfängerfragen genervt - zumal du zu clear() nochnichtmal eine gestellt hast. Genervt bin ich von der Tatsache, daß du einfach eine Behauptung hinstellst ohne offensichtlich in der Referenz nachgesehen zu haben, denn dort hättest du auch die Vererbungshirarchie gefunden. Hättest du nachgesehen und immer noch eine Verständnisfrage gehabt, wär ich nichtmal halb so genervt gewesen, wie von einer hingeklatschten Behauptung.

    lespaul schrieb:

    Da auch das Aufrufen des clear() ohne sichtbar zu sein, da es nicht in einem Interface beschrieben wäre, zu fehlern geführt hat, [...]

    "Zu fehlern geführt hat". boah. Welcher Code? Welche Fehler?

    Nochmal gaaanz langsam:

    basic_ios <- basic_istream <- basic_ifstream (§27.3.2-4)
    und clear() findet sich in Basic_ios (§27.5.5.4)


Anmelden zum Antworten