2016-03-28 18 views
0

Um eine Textdatei analysieren zu können, muss die Go-to-Methode Zeile für Zeile analysiert werden, was einfach und effizient ist.Lesen einer Textdatei ohne getline() in C++

Wenn es sich jedoch um eine riesige Datei handelt, die den gesamten Text in einer Zeile enthält, wäre die Funktion getline() definitiv nicht effizient. Ich frage mich, ob es eine andere effiziente Methode gibt, um diese riesige Datei zu analysieren?

Das einzige, was ich im Sinn habe, ist diese riesige Zeile in eine String-Variable zu speichern, und dann zu einzelnen Wörtern zu schneiden. Aber das klingt immer noch nicht effizient.

Bitte helfen. Vielen Dank!

+0

"die' getline() 'Funktion wäre definitiv nicht effizient." Woher weißt du das? Sie müssen es profilieren und entscheiden, ob es für Ihre Zwecke effizient genug ist. Die C++ - Standardbibliothek ist stark optimiert, so dass Sie angenehm überrascht sein können. – dasblinkenlight

+0

Welches spezifische Problem versuchen Sie eigentlich zu lösen? – Barry

+0

Das: Ich nehme diese Aussage zurück. Ich denke, ich suche nur nach einer besseren Methode als getline(). Es ist der geradlinigste und normalste Weg, aber ich denke, dass es wahrscheinlich eine bessere Methode als diese geben sollte. – Chandler

Antwort

1

Sie können std::istream::get(char *, std::streamsize) verwenden, um große Teile der Datei in einen entsprechend großen Puffer zu lesen und dann die Datei stückweise in großen Blöcken zu verarbeiten.

Alternativ können auch betriebssystemspezifische Möglichkeiten verwendet werden. Unter Linux könnte ein schreibgeschütztes mmap() einer Datei verwendet werden, um es mit einem Minimum an Aufwand zu durchpflügen.

+0

Die while (stream >> next_word) Methode löst mein Problem, wie Tony oben gesagt hat. Trotzdem Danke! – Chandler

0

getline ist im Grunde nur eine Abkürzung für die Behandlung von Zeilenumbrüchen - oder andere Zeichen! Also, wenn die Dateien einige Trennzeichen (Semikolon zum Beispiel) hat, können Sie

std::getline(fileStream, stringToSave, ';'); 

Was die Leistung verwenden - man muss nur Gotta versuchen, was in Ihrem Fall funktioniert.