10GB Dateien zeilenweise schnell einlesen?



  • Hallo. Ich muss eine Logdatei einlesen, den Inhalt parsen und in Datenbank ablegen. Jetzt ist die Datei mit ca 10GB sehr gross und ich benötige immer nur die Daten der aktuellen Zeile und will dann zur nächsten Zeile springen und diese auswerten.

    Eine Datei zeilenweise einzulesen gibt es viele Wege, aber welcher Weg wäre da der Effektivste und am schnellsten von der Ausführungszeit? Ich denke WinAPI hat hier die effektiveren Lösungen, darum poste ich nicht im C++ Forum. Über Tipps und mehr wäre ich dankbar.

    Ich nutze C++Builder 2009.



  • Was hat das denn mit WinAPI zu tun?

    #include <fstream>
    using namespace std;
    
    int main ()
    {
    	ifstream log ("log.txt", ios_base::in);
    	string str;
    	while (!log.eof ())
    	{
    		getline (log, str);
    		// jetzt steht die Zeile in 'str'...
    	}
    	return 0;
    }
    


  • Napf schrieb:

    Ich denke WinAPI hat hier die effektiveren Lösungen

    Wegen einer solchen Kleinigkeit (Datei einlesen) würde ich nicht die WinAPI bemühen, davon abgesehen dürfte das Einlesen verglichen mit Parsen/DB eh kaum ins Gewicht fallen.

    Wichtig ist nur, dass du die Datei nicht auf einmal einliest, sondern häppchenweise (Streaming).


Log in to reply