AGB  ·  Datenschutz  ·  Impressum  







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

FindComponent für TStringList

Ein Thema von TonyR · begonnen am 17. Jun 2006 · letzter Beitrag vom 17. Jun 2006
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von TonyR
TonyR

Registriert seit: 17. Jun 2006
Ort: Bautzen
503 Beiträge
 
FreePascal / Lazarus
 
#1

FindComponent für TStringList

  Alt 17. Jun 2006, 16:35
Ich habe folgende Frage:
Gibt es eine ähnliche Funktion wie FindComponent, die ich z.B. für TStringList benutzen kann?

Folgendes kann ja nicht funktionieren, weil TStringList keine Komponente ist:

TStringList(FindComponent('XXX').add('Irgendetwas'); Also weiß jemand womit das FindComponent ersetzt werden kann?
Es ist unmöglich, witzig zu sein ohne ein bisschen Bosheit. Die Bosheit eines guten Witzes ist der Widerhaken, der ihn haften lässt. - Georg Christoph Lichtenberg
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

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

Re: FindComponent für TStringList

  Alt 17. Jun 2006, 16:40
Benutze ein Array vom Typ TStringList. Aber was willst du eigentlich erreichen?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: FindComponent für TStringList

  Alt 17. Jun 2006, 16:41
Gar nicht.

Du kannst die Dinger alle in nem Array verwalten oder die ne Implementierung einer Map schreiben, aber FindComponent funktioniert auch nur, weil du ja eigentlich innerhalb der Form Self.FindComponent aufrufst und eine Form alle ihre Komponenten "kennt".

Du könntest natürlich auch eine eigene Stringlist schreiben und von TComponent ableiten, aber das wäre eigentlich nicht sehr sinnvoll.
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
Benutzerbild von TonyR
TonyR

Registriert seit: 17. Jun 2006
Ort: Bautzen
503 Beiträge
 
FreePascal / Lazarus
 
#4

Re: FindComponent für TStringList

  Alt 17. Jun 2006, 16:55
Ich programmiere einen Reimgenerator. Der zeigt zu jedem gesuchten Wort, Reime an.
Um Wörter schnell in die Datenbank zu schreiben und auszulesen habe ich bisher eine TStringList genommen, die beim Programmstart alle Wörter aufnimmt.
Um neue Wörter in die Datenbank aufzunehmen, kann ein beliebiger Text durchsucht werden. Aus diesem werden alle Wörter extrahiert und abgeglichen, ob sie schon in der Datenbank sind.
Da wollte ich (um die Effektivität zu erhöhen) die Wörter nach letzten Buchstaben in eigene TStringLists einzuordnen.

Delphi-Quellcode:
for i:=0 to TStringList(Findcomponent(NewWord[Length(NewWord)-1])).Count-1 do
   if NewWord=TStringList(Findcomponent(NewWord[Length(NewWord)-1])).Strings[i] then
      schonvorhanden:=true;

if schonvorhanden=false then
   TStringList(Findcomponent(NewWord[Length(NewWord)-1])).Add(NewWord);

schonvorhanden;=false;
Ich werde das mit dem Array mal probieren, Danke für den Hinweis!
Es ist unmöglich, witzig zu sein ohne ein bisschen Bosheit. Die Bosheit eines guten Witzes ist der Widerhaken, der ihn haften lässt. - Georg Christoph Lichtenberg
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: FindComponent für TStringList

  Alt 17. Jun 2006, 17:01
Na warum dann nicht einfach so: array[0..26] of TStringList?

Wenn du nen Buchstaben von A-Z hast (den letzten Buchstaben einfach mit UpperCase in einen Großbuchstaben umwandeln) dann machst du einfach Ord(Buchstabe)-65 und hast den Code. Das Element 26 verwendest du für alle sonstigen Buchstaben wie zum Beispiel Ä, Ö, Ü oder ß.
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
Benutzerbild von TonyR
TonyR

Registriert seit: 17. Jun 2006
Ort: Bautzen
503 Beiträge
 
FreePascal / Lazarus
 
#6

Re: FindComponent für TStringList

  Alt 17. Jun 2006, 17:06
Das ist super, danke 3_of_8!
Es ist unmöglich, witzig zu sein ohne ein bisschen Bosheit. Die Bosheit eines guten Witzes ist der Widerhaken, der ihn haften lässt. - Georg Christoph Lichtenberg
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.142 Beiträge
 
Delphi 12 Athens
 
#7

Re: FindComponent für TStringList

  Alt 17. Jun 2006, 17:10
Wie breits gesagt, kann es sowas (eigentlich) nicht geben, da nirgends eine Liste der existierenden Stringlisten existiert ... wie es übrigens bei fast allen Variablen/Klassen ist.

Und wenn man die Forensuche mal bemühen würde, dann könnte man dieses in hunderten anderen threads ebenfalls nochmal nachlesen


Also mußt du dir selber soeine Liste erstellen.

OK, man könnte zwar durch den gesamten Prozessspeicher wandern und prüfen, ob irgendwo ein Speicherbereich existiert, welcher rein zufällig einen Wert enthält, welcher auf die/eine Typendefinition für 'ne TStringList zeigt.
Wie du am "rein zufälli" erkennen solltest, ist/kann diese Methode nicht 100% sicher sein.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: FindComponent für TStringList

  Alt 17. Jun 2006, 17:37
Achja nebenbei: Das mit dem Array bringt auch keinen Geschwindigkeitsvorteil, soweit ich weiß.

Gut, ich weiß nicht wie eine StringList intern implementiert ist.

Wenn es eine verkettete Liste ist, bringt das einen Vorteil (Zugriffszeit ist linear), wenn es ein Binärbaum ist ebenfalls (Zugriffszeit logarithmisch), aber wenn es ein array of String ist, dann nicht. (Zugriffszeit konstant).
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#9

Re: FindComponent für TStringList

  Alt 17. Jun 2006, 21:05
Zitat von TonyR:
Da wollte ich (um die Effektivität zu erhöhen) die Wörter nach letzten Buchstaben in eigene TStringLists einzuordnen.
Einen spürbaren Zeitgewinn solltest du bereits erreichen, wenn du eine sortierte Stringliste verwendest. Da diese Duplikate standardmäßig ignoriert, kannst du die gefundenen Wörter einfach hinzufügen:

Delphi-Quellcode:
var
  L : TStringList;
begin
  L := TStringList.Create;
  L.Sorted := True;
    :
  L.Add ('Wort1');
  L.Add ('Wort2');
  L.Add ('Wort3');
    :
  L.Free;
end;
Der Zeitgewinn resultiert daraus, daß bei einer sortierten Liste eine binäre Suche statt einer sequentiellen Suche durchgeführt werden kann. Vielleicht kannst du dann sogar auf die Arrays verzichten.

Gruß Hawkeye
  Mit Zitat antworten Zitat
Elvis

Registriert seit: 25. Nov 2005
Ort: München
1.909 Beiträge
 
Delphi 2010 Professional
 
#10

Re: FindComponent für TStringList

  Alt 17. Jun 2006, 21:41
Azhaimars StringDictionary wäre da noch besser. Denn binary search ist immer noch Suchen. eine hashtable muss nur im ungünstigten Fall überhaupt suchen.
Robert Giesecke
I’m a great believer in “Occam’s Razor,” the principle which says:
“If you say something complicated, I’ll slit your throat.”
  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 15:53 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