Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Suchen und Löschen von Text in Memos (https://www.delphipraxis.net/150248-suchen-und-loeschen-von-text-memos.html)

himitsu 13. Apr 2010 07:37

Re: Suchen und Löschen von Text in Memos
 
Zitat:

Delphi-Quellcode:
For y := 0 to filelist.Count Do

Das ist etwas, welches ständig erwähnt wird. :warn:

Wenn der Index (hier y) über eine For-Schleife durchgezählt wird,
dann Löschen immer rückwärts
und Einfügen immer vorwärts,
(beim bloßen Verändern des Inhalts der Einträge ist es egal)
denn durch diese Operationen verschieben sich die Indize der Einträge.

Oder man nutzt eine While-Schleife und paßt den Index an.


1 und 2 sollen mit gelöscht werden:
Code:
0 1 2 3 4     A

y
0 1 2 3 4

  y
0 2 3 4

    y
0 2 3 4       U

      y
0 2 3 4

        y
0 2 3 4 -     I

          y
0 2 3 4 -     X
[/code]
A = Ausgangsbelegung
U = die 2 wird übergangen, da sie vorgerutscht ist, aber y weiterzählte
I = Out of Index, da das Schleifenende sich nicht anpaßt und nun ein Eintrag fehlt
X = erst Recht Out of Index, da .Count=5, aber der höchte Index um Eines kleiner war (0-basierender Index)

Cumgrinder 13. Apr 2010 16:55

Re: Suchen und Löschen von Text in Memos
 
Zitat:

Zitat von himitsu
Das ist etwas, welches ständig erwähnt wird. :warn:

Wenn der Index (hier y) über eine For-Schleife durchgezählt wird,
dann Löschen immer rückwärts
und Einfügen immer vorwärts,
(beim bloßen Verändern des Inhalts der Einträge ist es egal)
denn durch diese Operationen verschieben sich die Indize der Einträge.

Kleine Änderung große Wirkung! :stupid: :stupid:
Jetzt funktioniert das Programm nahezu perfekt.

Cumgrinder 13. Apr 2010 21:13

Re: Suchen und Löschen von Text in Memos
 
Die Blacklist hat inzwischen fast 20000 Zeilen.
Wenn ich die Zeilen sortiere, kann ich den Vorgang dann beschleunigen ?

himitsu 13. Apr 2010 22:27

Re: Suchen und Löschen von Text in Memos
 
Ja, denn die StringList hat für eine sortierte Liste eine besserer Suchmethode, welche durchschnittlich mit nur Log2(SL.Count div 2) Vergleichen einen String in der Liste finden kann.

Wärend es, bei einer unsortierten Liste, durchschnittlich (SL.Count div 2) Vergleiche nötig sind,
da im Extrem alle Strings/Zeilen geprüft werden müssen.

Cumgrinder 13. Apr 2010 22:31

Re: Suchen und Löschen von Text in Memos
 
Was muss ich tun damit er den für die sortierten Listen optimierten Suchalgorithmus benutzt? Irgendeine Variable setzen?
Oder macht er das automatisch?

himitsu 13. Apr 2010 23:28

Re: Suchen und Löschen von Text in Memos
 
Das geht automatisch.


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:25 Uhr.
Seite 2 von 2     12   

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