![]() |
Textdatei schnell verarbeiten
Hallo!
Ich möchte große Textdateien (bis 10 MB oder größer) zeilenweise nach einem String durchsuchen. Wenn dieser in einer Zeile vorhanden ist, soll die Zeile in ein StringList kopiert werden. Wie mache ich das möglichst schnell? MfG |
Re: Textdatei schnell verarbeiten
Textdatei in StringList einlesen und Zeile für Zeile prüfen. Ist der gesuchte String in einer Zeile nicht vorhanden, dann die Zeile aus der StringList löschen. Übrig bleibt die Liste mit den Zeilen, in denen der String vorkommt.
Ich weiß aber nicht, ob das viele Löschen schneller geht, als das kopieren in eine zweite Liste. In jedem Falle sollte die Liste bei der Lösch-Variante von hinten durchsucht werden, damit beim Löschen einer Zeile nicht immer alle anderen nachrücken müssen. |
Re: Textdatei schnell verarbeiten
Ich glaube bei einer 10 MB datei ist es besser auf die alten Delphi-Sachen AssignFile, Reset, ReadLn zurückzugreifen und so die Datei zeilenweise einlesen. Mit Pos kann man dann eine Zeile prüfen und eventuell der Stringlist hinzufügen
|
Re: Textdatei schnell verarbeiten
Zitat:
Einfacher ist es sicher, die Datei zu laden, und anschliessend von unten nach oben ueberpruefen ob die Zeile den text enthaelt. Dabei ist zu sagen, dass auch die Pos-Funktion nicht gerade ein Schnellzug ist. Greetz alcaeus |
Re: Textdatei schnell verarbeiten
Zitat:
|
Re: Textdatei schnell verarbeiten
Such mal nach Memory Mapped Files. :???:
Gruss |
Re: Textdatei schnell verarbeiten
Memory Mapped Files ist stark übertrieben - so groß sind meine Dateien auch nicht. Ich werde es mal mit der Stringlist testen ob das schnell genug ist. Dachte gibt evtl was schnelleres und schöneres, aber mal sehen.
|
Re: Textdatei schnell verarbeiten
Ich hatte mal die Aufgabe 30 MB große Textdateien und größer in mehrer Textdateienaufzuteilen (jeweils nach einer Leerzeile). Ihc habe auch mit StringListen gearbeitet und es ging eigentlich relativ flott.
|
Re: Textdatei schnell verarbeiten
Zitat:
Suche schnell vonstatten gehen. Die Variante mit readln scheidet damit aus, weil immer nur sehr kleine Datenmengen eingelesen werden; dass bringt viel Overhead mit sich. Die Arbeit mit TStringlist geht recht fix und angenehem, hat aber den Nachteil, dass sehr grosse Dateien (> 100 MB) grosse Speicher Resourcen verbraten. Am Schnellsten: Datei mit TFileStream öffnen, grosse Blöcke (64kb bis 4 MB) mit BlockRead einlesen. Den Block mit einem schnellen Suchverfahren durchsuchen (Boyer-Moore). Beim Einlesen des nächsten Blocks muss man aufpassen und per Seek einige Bytes zurückpositionieren. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:18 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz