2013-04-02 14 views
5

VBA FrageVBA lasen große Textdatei Zeile für Zeile in umgekehrter Reihenfolge

Es gibt eine große Protokolldatei (rund 500.000 Linien), ich brauche es Zeile für Zeile in umgekehrter Reihenfolge zu lesen, dh von den letzten Linie zur ersten Linie. Ich weiß, ich Filesystem in der Microsoft Scripting Runtime Referenz verwenden können, aber es gibt keine solche Option wie Reverse für Readline-Methode in Textstream

Nun, der einzige Weg, ich ist so denken kann, hat einen Zähler und Überspringe die vorherigen Zeilen für jede Zeile, die ich gelesen habe, aber das ist definitiv nicht gut genug. Jeder Vorschlag Code/Algo wird sehr geschätzt.

+0

können Sie uns das Format der Protokolldatei und ein paar Zeilen Daten zeigen ... ALSO, bitte sagen Sie uns, wie Sie die umgekehrten Daten verwenden, werden Sie es in eine andere Datei oder eine MS Excel 2007+ Arbeitsmappe legen . Gibt es eine KeyColumn wie LogID? –

+1

Die beste Option mit einer so großen Datei ist die Verwendung von ADO und des OLE DB-Textdateitreibers. Siehe [MSDN: Viel ADO über Textdateien] (http://msdn.microsoft.com/en-us/library/ms974559.aspx) und Sie würden die Daten mit ORDER BY * Schlüsselspaltenname * DESC –

Antwort

3

Wenn Ihr Protokoll eine Art Datenbank mit Feld ist, die es ermöglicht, die Reihenfolge zu bestimmen (gibt es ein Datumsfeld oder Zeilennummernfeld), dann könnten Sie versuchen, ADO-Lösung mit SQL-Abfrage zu verwenden, um das Protokoll umgekehrt zu lesen Bestellung (ORDER BY ... DESC). So können Sie vom letzten zum ersten lesen. Oder generell - versuchen Sie, ADO zu verwenden.

+1

+1 genau, verwenden Sie ADO mit ORDER BY, und sehen Sie [MSDN: Viel ADO über Textdateien] (http://msdn.microsoft.com/en-us/library /ms974559.aspx) –

+0

Textdateien und ADO http://msdn.microsoft.com/en-us/library/ms974559.aspx –

+0

Thx Jungs, das ist wirklich ein guter Ansatz, aber nach der Erkenntnis kann ich nicht Zeile lesen Zeile umgekehrt plus jede Zeile des Logs ist nicht normalisiert, ich finde einen "Algo", um es zu tun, ohne dass umgekehrt gelesen werden muss. Danke nochmal für die Eingaben! –

1

Eine Datei ist nicht zeilenbasiert oder nur zeichenbasiert, es sind nur Bytes, daher gibt es keine Möglichkeit, Zeilen in umgekehrter Reihenfolge in einer Datei zu lesen. Wie der Text in Zeilen aufgeteilt wird, hängt nur davon ab, wo im Text Zeilenumbrüche vorkommen.

Sie können Zeilen von Anfang an lesen und sie in einem rotierenden Puffer speichern, so dass Sie zum Beispiel die letzten 1000 Zeilen im Puffer haben, wenn Sie das Ende der Datei erreichen. Auf diese Weise haben Sie eine bestimmte Anzahl von Zeilen, auf die Sie aus Ihrem Puffer zugreifen können, ohne die gesamte Datei für jede einzelne Zeile lesen zu müssen.

Danach wissen Sie, wie viele Zeilen in der Datei vorhanden sind. Wenn Sie also den Puffer auffüllen müssen, können Sie einfach eine bestimmte Anzahl von Zeilen überspringen und die folgenden Zeilen in den Puffer einlesen.

+0

thx für die page-by-page IO Verbesserung für diese, wirklich helfen –

Verwandte Themen