AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Textdatei schnell verarbeiten

Ein Thema von Jörn · begonnen am 9. Dez 2004 · letzter Beitrag vom 9. Dez 2004
Antwort Antwort
Jörn

Registriert seit: 5. Sep 2003
Ort: Helmstedt
312 Beiträge
 
#1

Textdatei schnell verarbeiten

  Alt 9. Dez 2004, 10:06
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
  Mit Zitat antworten Zitat
IngoD7

Registriert seit: 16. Feb 2004
464 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: Textdatei schnell verarbeiten

  Alt 9. Dez 2004, 10:26
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.
  Mit Zitat antworten Zitat
Benutzerbild von jim_raynor
jim_raynor

Registriert seit: 17. Okt 2004
Ort: Berlin
1.251 Beiträge
 
Delphi 5 Standard
 
#3

Re: Textdatei schnell verarbeiten

  Alt 9. Dez 2004, 10:32
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
Christian Reich
Schaut euch mein X-COM Remake X-Force: Fight For Destiny ( http://www.xforce-online.de ) an.
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#4

Re: Textdatei schnell verarbeiten

  Alt 9. Dez 2004, 11:22
Zitat von jim_raynor:
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
Das wuerde ich nicht sagen. Ich habe festgestellt dass genau diese alten Funktionen verdammt langsam sind.
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
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
IngoD7

Registriert seit: 16. Feb 2004
464 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: Textdatei schnell verarbeiten

  Alt 9. Dez 2004, 12:58
Zitat von alcaeus:
Dabei ist zu sagen, dass auch die Pos-Funktion nicht gerade ein Schnellzug ist.
Aber was nützt es - so ohne jede Alternative?
  Mit Zitat antworten Zitat
Benutzerbild von hitzi
hitzi

Registriert seit: 2. Jan 2003
Ort: Eibau
768 Beiträge
 
Delphi 2010 Professional
 
#6

Re: Textdatei schnell verarbeiten

  Alt 9. Dez 2004, 13:04
Such mal nach Memory Mapped Files.

Gruss
Thomas
Besucht doch mal http://www.hitziger.net
  Mit Zitat antworten Zitat
Jörn

Registriert seit: 5. Sep 2003
Ort: Helmstedt
312 Beiträge
 
#7

Re: Textdatei schnell verarbeiten

  Alt 9. Dez 2004, 13:14
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.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#8

Re: Textdatei schnell verarbeiten

  Alt 9. Dez 2004, 13:16
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.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#9

Re: Textdatei schnell verarbeiten

  Alt 9. Dez 2004, 15:29
Zitat von Jörn:
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.
Nur wenn die Daten in grossen Blöcken (min. 64 kb) in den Speicher gelesen werden, kann die
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.
Andreas
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:12 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz