AGB  ·  Datenschutz  ·  Impressum  







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

TstringList und TRegex.isMatch

Ein Thema von ScharfeMietze · begonnen am 19. Okt 2015 · letzter Beitrag vom 25. Okt 2015
Antwort Antwort
Seite 1 von 2  1 2      
ScharfeMietze

Registriert seit: 5. Mär 2014
165 Beiträge
 
Delphi 10.2 Tokyo Architect
 
#1

TstringList und TRegex.isMatch

  Alt 19. Okt 2015, 01:47
Die Frage was ist smarter bei einer TsringList mit x tausend einträgen.
Ein Schleifendurchlauf mit for I = 0 to TstringList count -1 und Tregex.isMatch. oder TRegex.Ismatch(Tstringlist.text.....);
Da auch mal bis zu 20k Einträge kommen können wüste ich das gerne.

Gruß
SM
  Mit Zitat antworten Zitat
Lemmy

Registriert seit: 8. Jun 2002
Ort: Berglen
2.366 Beiträge
 
Delphi 10.3 Rio
 
#2

AW: TstringList und TRegex.isMatch

  Alt 19. Okt 2015, 05:31
Hallo,

eine Suche wird dann schneller wenn Du nicht mehr alle 20k Einträge durchsuchen musst. Mit TRegEx wird der Vergleich an sich ja komplexer - daher würde ich vermuten, dass das am Ende nicht schneller ist.

Entweder du kannst über die THasedStringList was erreichen oder wenn Du die StringList sortieren kannst über binäre Suche die Anzahl der Vergleiche eingrenzen.
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#3

AW: TstringList und TRegex.isMatch

  Alt 19. Okt 2015, 06:26
Eine simple Zeitmessung für Variante A und B würde doch Erkenntnisse liefern ... so mache ich das immer
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#4

AW: TstringList und TRegex.isMatch

  Alt 19. Okt 2015, 06:51
Hallo,

eine Suche wird dann schneller wenn Du nicht mehr alle 20k Einträge durchsuchen musst. Mit TRegEx wird der Vergleich an sich ja komplexer - daher würde ich vermuten, dass das am Ende nicht schneller ist.
Es kommt auf die Implementierung in RegEx an.

Aber einfach nur Sortieren oder gar eine Hashmap bringen hier gar nichts, denn es geht um pattern matching und nicht um einfachen Vergleich von Strings.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe
Online

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

AW: TstringList und TRegex.isMatch

  Alt 19. Okt 2015, 07:09
Ein Aufruf von TStringList.Text iteriert doch über alle Elemente und setzt die mit Zeilenumbruch aneinander. Das RegEx muss auch den Text von vorne bis hinten durchgehen, dauert also vermutlich proportional zur Textlänge. Debuggen lässt es sich bestimmt leichter in der ersten Version.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Lemmy

Registriert seit: 8. Jun 2002
Ort: Berglen
2.366 Beiträge
 
Delphi 10.3 Rio
 
#6

AW: TstringList und TRegex.isMatch

  Alt 19. Okt 2015, 07:18
Aber einfach nur Sortieren oder gar eine Hashmap bringen hier gar nichts, denn es geht um pattern matching und nicht um einfachen Vergleich von Strings.
hast recht, das erste Regex habe ich glatt überlesen...
  Mit Zitat antworten Zitat
ScharfeMietze

Registriert seit: 5. Mär 2014
165 Beiträge
 
Delphi 10.2 Tokyo Architect
 
#7

AW: TstringList und TRegex.isMatch

  Alt 19. Okt 2015, 10:37
Leider kann ich (vorab) nicht Testen, da ich die originalen Datensätze nicht habe.
Ich hatte auch auf eine eindeutigere Antwort gehofft.
Was aber wiederum auch nicht unbedingt schlecht ist wenn es keine Eindeutige Antwort gibt, da dann keine 10 Sekunden unterschied zu erwarten sind ^^
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#8

AW: TstringList und TRegex.isMatch

  Alt 19. Okt 2015, 11:04
Hallo,

mir ist bei der Fragestellung nicht ganz klar, was Du als Ergebnis erwartest?

Kommt eine Zeichenfolge... irgendwo in der Stringliste vor

oder

In welcher Zeile der Stringliste kommt eine Zeichenfolge... vor?

Vermutlich ersteres?

Mein Erfahrung bei der Arbeit mit Stringlisten mit größerem Inhalt (mehrere MB Text in einer mehr oder weniger großen Anzahl von Zeilen):

Das Ersetzen von Zeichenfolgen via AnsiReplaceText... ist bei einer zeilenweisen Verarbeitung deutlich schneller, als eine Ersetzung über "Stringliste.Text".

Ob sich TRegex.isMatch ähnlich verhält, kann ich (mangels Erfahrung) nicht sagen.
  Mit Zitat antworten Zitat
ScharfeMietze

Registriert seit: 5. Mär 2014
165 Beiträge
 
Delphi 10.2 Tokyo Architect
 
#9

AW: TstringList und TRegex.isMatch

  Alt 25. Okt 2015, 11:24
Es geht um eine Art Index der Inhalt eines Editfeldes wird mit dem Index abgeglichen. Wenn vorhanden verwerfe Inhalt des Tabsheets wenn nicht vorhanden füge es dem Index hinzu und arbeite dioutinen ab.
Ich mache momentan den Probelauf mit der Regex Variante schau mer mal.
Grüße SM

Geändert von ScharfeMietze (25. Okt 2015 um 11:28 Uhr)
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#10

AW: TstringList und TRegex.isMatch

  Alt 25. Okt 2015, 16:40
Hallo,

unter 'nem Index stelle ich mir sowas vor:
Code:
Aladin
Benjamin
Carolin
...
Yvonne
Zacharias
Ist Dein Index in der Art aufgebaut?
Wenn ja, dann versuche es doch mal mit
Delphi-Quellcode:
if StringListe.IndexOf(Editfeld.Text) < 0 then begin
  StringListe.Add(Editfeld.Text);
end else begin
  VerwerfeInhaltDesTabsheets;
end;
Die Stringliste muss dafür nicht sortiert sein.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 16:32 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