Springe zur ersten Zeile - ios::beg geht nicht



  • Okay, also ich scheitere an folgendem, eigentlich einfachen Problem:
    Ich habe Datensätze (Titel, Autor, Jahr, Verlag) in einer Textdatei. Zwischen den einzelnen Einträgen befinden sich Trennstriche. In einem ersten Durchlauf soll mein Programm schauen, wieviele Datensätze es gibt. Dafür durchläuft es die gesamte Textdatei und sucht die Trennstriche. Soweit alles gut. Am Ende dieses Datensatz-Durchlaufes will ich wieder zur ersten Zeile springen um mit dem eigentlichen Einlesen beginnen zu können. Der Sprung zur ersten Zeile funktioniert auch, aber die erste Zeile wird nicht ausgelesen. Ich habe keine Antwort drauf gefunden. Ist solch ein Problem schonmal bei jemandem aufgetreten? bzw. hat jemand einen Tipp?

    Hier der Quellcode mit meiner superschlechten Lösung für dieses Problem:

    void ConfigMain::load()
    {
    	if (!m_ifInput || !m_szFullPathIn)
    		return;
    
    	...
    
    	unsigned uiNoOfFormats = 0;	
    
    	while( !(m_ifInput->eof()) )
    	{
    		char sz[1024];
    		char * sz1 = "------------------------------";
    
    		// Anzahl von Datensätzen wird berechnet:
    		if ( strncmp(sz, sz1, 30) == 0 )
    			uiNoOfFormats++;
    	}
    
    	if (!uiNoOfFormats)
    		return;
    
    	m_uiNoOfConversionFormats = uiNoOfFormats;
    
    	m_pInput = new ConversionPara [m_uiNoOfConversionFormats];
    	if (!m_pInput)
    		return;
    
    	// falsche Lösung!!!
    	m_ifInput->close();
    	delete m_ifInput;
    
    	m_ifInput = new ifstream(m_szFullPathIn);
    	if (!m_ifInput)
    		return;
    
    	// richtig:
    	// m_ifInput->seekg( ios::beg );
    	// int pos = m_ifInput->tellg();
    
    	// Datesätze einlesen:
    	for (unsigned ui = 0; ui < m_uiNoOfConversionFormats; ui++)
    	{
    		....
    	}
    }
    


  • das objekt (ifstream?) befindet sich im eof-zustand. du musst fstream::clear() aufrufen und zwar bevor du das auf den beginn setzt, klar?



  • 😕

    seekg(0, std::ios::beg);
    


  • m_ifInput->clear();
    m_ifInput->seekg( ios::beg );
    


  • Du musst clear() aufrufen un das eof bit löschen das gesetzt ist.

    [edit] << werd alt. Viel zu lange gebraucht 😃 [/edit]



  • Okay, vielen vielen Dank. Genau das war der Fehler!

    Gruss

    2atlantis


Anmelden zum Antworten