Schnelles Ersetzen von String

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6857
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Beitrag von af0815 »

monta hat geschrieben:Da ich erst Stringreplace von Laz hatte, bin ich so schon mehr als Zufrieden mit der FastCode-Variante. Auf die Dateioperationen kann ich verzichten, die mag ich eh nicht so besonders. ;)
Ich sehe dann einen Vorteil, wenn die Datenmengen (sehr) groß werden, da du nur immer die Buffer herein / hinausschreibst.

Bezüglich Geschwindigkeitsvorteil von FastCode, vielleicht ist das auch ein Feedback an die Lazarus/FPC Entwickler wert :-)
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

monta
Lazarusforum e. V.
Beiträge: 2809
Registriert: Sa 9. Sep 2006, 18:05
OS, Lazarus, FPC: Linux (L trunk FPC trunk)
CPU-Target: 64Bit
Wohnort: Dresden
Kontaktdaten:

Beitrag von monta »

Christian hat geschrieben:Interesant ist hier das StringReplace mit kurzen zeilen sehr viel schneller ist als mit dem gesamten Text.
Ich hab mir das originale Stringreplace nicht angeschaut, aber irgendwie könnte man fast meinen, es fängt nach jeder Ersetzung wieder von vorn an, oder irgend soetwas. Erst dachte ich ja, es liegt an der Eigenschaft Text, das diese zu lange braucht, aber das ist ja nicht wirklich bedeutend.

Wie af schon geschrieben hat, vielleicht sollte man den Test mal in den Bugtrakcer schreiben, vielleicht findet sich der FastCode und Laz irgendwie zusammen.

@af

Code: Alles auswählen

Für Einzelzeichenersetzungen kann man den Buffer linear durchgehen und die Ersetzungen direkt im Buffer machen.
Das setzt doch aber voraus, das die Ersetzung ebenfalls genau ein Zeichen beträgt, oder?
Da ich aber auch '"' zu '' tauschen will, sähe es wahrscheinlich schlecht aus, mit solchen Optimierungen?
Johannes

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6857
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Beitrag von af0815 »

monta hat geschrieben: 1. Alle Tabulatoren durch ein anderes Char austauschen
2. Alle Hochkommas entfernen
..............
Interesant ist hier das StringReplace mit kurzen zeilen sehr viel schnelle
Das setzt doch aber voraus, das die Ersetzung ebenfalls genau ein Zeichen beträgt, oder?
Da ich aber auch '"' zu '' tauschen will, sähe es wahrscheinlich schlecht aus, mit solchen Optimierungen?
Für den Fall 1 gehts. Bei Fall 2, kann ich mir noch vorstellen Zeit zu gewinnen, wenn ich einzelne Zeichen aus dem Buffer nehmen kann, denn kürzer kann der Buffer ja leichter werden - oder die Schreibroutine so gestalten, das Vom Buffer an, bis vor dem zeichen geschrieben wird, das Zeichen selbst im Buffer übersprungen wird und dann das ganze von vorne.

Hat ja alles nur dann Sinn wenn die Ersetzung bzw. Löschung einfach ist und man das letzte an Geschwindigkeit MIT Lazarus herauspressen will und die Dateien groß sind. Für den allgemeinen Fall ist da bis jetzt in den Posts besprochene über die StringList sicher einfacher und flexibler.

Vor allen interessant ist die Diskussion und die Erkenntnisse (Geschwindigkeit) über die Suchfunktionen selbst :-)
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

@monta
ja geladen werden muss sie immer das ist richtig, aber beim direkten laden könnte man die "zeilen" die schon geladen wurden bearbeiten. z.b. eine Zeile laden die gleich bearbeiten. dann die nächste Zeile. Bei einer ListBox die ich für Delphi erstellt hatte, hatte ich zuerst eine TStringList genommen um eine deutsche Wörter liste von einigen 1000 Einträgen zu laden, Das laden habe ich richtig gemerkt, als ich das auf das Direkte laden umgestellt hatte ging das deutlich schneller !
MFG
Michael Springwald

Antworten