AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Algorithmen, Datenstrukturen und Klassendesign Delphi Effizientes Einlesen und Verarbeiten von Textdatei
Thema durchsuchen
Ansicht
Themen-Optionen

Effizientes Einlesen und Verarbeiten von Textdatei

Ein Thema von Dalai · begonnen am 30. Jun 2022 · letzter Beitrag vom 4. Jul 2022
Antwort Antwort
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.599 Beiträge
 
Delphi 12 Athens
 
#1

AW: Effizientes Einlesen und Verarbeiten von Textdatei

  Alt 2. Jul 2022, 23:18
Ich würde einen Ansatz per TStreamReader vorschlagen. Dabei wird nicht erst die ganze Datei in den Speicher geladen und es sind weder IndexOf noch StringsBetween nötig:
Delphi-Quellcode:
uses
  System.SysUtils,
  System.Classes;

...

procedure NameNotRelevant;
var
  reader: TStreamReader;
  line: string;
  data: string;
begin
  reader := TStreamReader.Create(FFileName);
  try
    data := '';
    while not reader.EndOfStream do begin
      line := reader.ReadLine;
      if line = PEM_HEADER then begin
        data := '';
      end
      else if line = PEM_FOOTER then begin
        NameNotRelevant2(data);
        data := '';
      end
      else begin
        data := data + TrimRight(line);
      end;
    end;
  finally
    reader.Free;
  end;
end;
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von Dalai
Dalai

Registriert seit: 9. Apr 2006
1.683 Beiträge
 
Delphi 5 Professional
 
#2

AW: Effizientes Einlesen und Verarbeiten von Textdatei

  Alt 4. Jul 2022, 18:03
Ich würde einen Ansatz per TStreamReader vorschlagen. Dabei wird nicht erst die ganze Datei in den Speicher geladen und es sind weder IndexOf noch StringsBetween nötig:
Interessanter Ansatz, danke. Leider ist diese Variante in meinen Tests langsamer. Der Gesamtvorgang braucht zwischen 60 und 100 ms, mit der Stringliste gesamt zwischen 40 und 60 ms. Wie gesagt, das ist die Gesamtzeit, also Einlesen mit LoadFromFile und anschließende Verabeitung. Daher sind diese Zeitangaben nicht mit den o.g. vergleichbar.

Die Variante hat noch einen weiteren Nachteil: Dateien ohne Header werden nicht berücksichtigt. Ja, das hatte ich nicht erwähnt, und deshalb konnte das keiner sonst wissen.

Musst Du auf Groß-/Kleinschreibung achten bzw. nicht beachten?
Die Frage hab ich mir auch gestellt. Aktuell weiß ich es nicht. Da muss ich noch im zugehörigen RFC nachgrasen, wie die Header auszusehen haben.

Zitat:
Im zweiten Fall könntest Du das AnsiCompareText weglassen. Das Dauer durchaus auch seine Zeit.
Nach meinen Messungen macht es kaum etwas aus, einzelne Millisekunden mehr bzw. weniger. Relevanter als die CPU-Zeit wäre in der Tat die Schreibweise.

Grüße
Dalai
  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 08:54 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 by Thomas Breitkreuz