![]() |
Re: Prüfen ob Wörter in einem String vorkommen, Reihenfolge
doch, klappt ja. Ich kann nun schön meinen String zerlegen. Wie gesagt, ich weiß nun aber nichts mehr so recht was ich damit anfangen soll, da ich das ja nicht in eine SQL-Anweisung einbauen kann.
Ich hatte ja vor, wenn ich einen Titel "Odysee im Weltall, 2001:" habe, den in "2001: Odysee im Weltall" zu finden, wenn du dich erinnern kannst. Bin da ganz vom Wege abgekommen... Gambit |
Re: Prüfen ob Wörter in einem String vorkommen, Reihenfolge
@ Lutz:
ich habe wohl jetzt die Lösung gefunden. Ich löse also den Suchstring in einzelne Wörter auf, die ich in die Stringliste schreibe. In einer Schleife bastele ich mir dann daraus die Select-Anweisung zusammen ungefähr nach dem Motto:
SQL-Code:
Damit habe ich zumindest die Gewähr, dass alle Wörter in dem String der Table2 vorkommen müssen, egal in welcher Reihenfolge.
select * from Table2 where (Titel like '%SList[0]%') and (Titel like '%SList[1]%') usw.
So in Etwa, wenn ich nicht zu müde bin. Werds morgen mal ausprobieren... Guts Nächtle Gambit |
Re: Prüfen ob Wörter in einem String vorkommen, Reihenfolge
Sollte klappen, z.B. so :
Delphi-Quellcode:
Tschüss,
querystr := 'select * from datenbank2'; // querystr ist eine string var die das SQL-Statement enthält
if SList.Count > 0 then querystr := querystr + #10 + #13 + 'where titel like ''%'+SList[0]+'%'''; i := 1; // i ist eine locale integer variable while i <= SList.Count-1 do begin querystr := querystr + #10 + #13 + 'and titel like ''%'+SList[i]+'%'''; inc(i); end; Query1.SQL.Add(querystr); Lutz |
Re: Prüfen ob Wörter in einem String vorkommen, Reihenfolge
genau so hatte ich mir das gedacht!
Besten dank nochmal für die Hilfe, das gilt nat. für alle! Gambit |
Re: Prüfen ob Wörter in einem String vorkommen, Reihenfolge
Zitat:
nettes kleines Programm - funktioniert einwandfrei bei mir ;) Aber was lustiges ist mir aufgefallen: Wenn ich das Programm direkt als Anhang öffne wird es in der Internet-Zone gestartet und aus "Sicherheitsgründen" wird das Menü nicht gezeichnet (Security Exception, Methode System.Drawing.CopyFromScreen) :mrgreen: Ich bin mir sicher, dass das Menü meine Sicherheit gefährdet ;) mfG mirage228 |
Re: Prüfen ob Wörter in einem String vorkommen, Reihenfolge
Zitat:
Nein, in wirklichkeit ist das ein Bug in der 2.0 Beta des FrameWorks. Eine Assembly, die über das Internet aufgerufen wird hat ziemlich strikte Einschränkungen, deshalb knallt es bei den Kopieraktionen im Menu. ;) |
Re: Prüfen ob Wörter in einem String vorkommen, Reihenfolge
Ich finde das alles sehr kompliziert und versuche mehr durch Raten als durch Wissen zum Ziel zu kommen :cry:
Aber immerhin bin ich jetzt schon so weit gekommen, dass die Internetseite heruntergeladen und durchsucht wird. Leider kann ich nur nach einem einzigen String suchen und ihn auswerten. Sobald ich versuche, einen zweiten String auszuwerten, kriege ich eine Exception (Listenindex überschreitet das Maximum (1)).
Delphi-Quellcode:
var
SpielerListe : String; sl : TStringList; ndx : Integer; okay : Boolean; i:integer; begin //HTML-Seite wird heruntergeladen und gespeichert okay := False; sl := TStringList.Create; try sl.Delimiter := ' '; for i:=0 to sl.Count-1 do begin sl.DelimitedText := memGesucht.Lines[i]; for ndx := 0 to pred (sl.Count) do begin okay := Pos (sl.Strings[ndx],SpielerListe) > 0; // Wort ist vorhanden if not (okay) then begin memGetrennt.Lines.Add(sl.Strings[ndx]); end else begin memVerbunden.Lines.Add(sl.Strings[ndx]); end; end; end; finally FreeAndNil (sl); end; end; |
Re: Prüfen ob Wörter in einem String vorkommen, Reihenfolge
es geht aber auch ohne schleife: TStringlist kann beim Hinzufügen von Duplikaten mit einem Fehler reagieren; vorallem ist das optimierter, da sortiere Stringlisten Quicksort verwendet.(vorallem wenn beide Listen lang sind!!) Ich habe das auch mal gebraucht, habe das dann so gelöst:
Delphi-Quellcode:
[edit=Luckie][ delphi]-Tags eingefügt. Beim nächsten mal bitte selber machen. Mfg, Luckie[/edit]
function IstVorhanden(CommaText1, Commatext2 : String; DelimiterChar: String) : Boolean;
var tstr1, tstr2 : TStringList; begin tstr1 := TStringList.Create(); tstr2 := TStringList.Create(); try with tstr1 do begin Sorted := True; // ! wichtig, sonst geht das ganze nicht Duplicates := dupIgnore; Delimiter := DelimiterChar; DelimitedText := CommaText1; end; with tstr2 do begin Sorted := True; // ! wichtig, sonst geht das ganze nicht Duplicates := dupIgnore; Delimiter := DelimiterChar; DelimitedText := CommaText2; end; with tstr1 do begin Duplicates := dupError; try AddStrings(tstr2); Result := False; except Result := True; end; end; finally tstr1.Free; tstr2.Free; end; end; |
Re: Prüfen ob Wörter in einem String vorkommen, Reihenfolge
Tut mir Leid, aber mit dem Quelltext kann ich kaum was anfangen, weil es für mich kaum einen Bezug zu meinem Problem bzw. meinem Quelltext darstellt.
Was bedeuten die zwei StringLists? In welche muss ich meine HTML-Datei laden und in welche meine Suchwörter? Wieso wird "Delimiter" in der Funktion übergeben? Kann ich das auch irgendwo einfach mit Leerzeichen oder "*" definieren? Was ist CommaText1 und CommaText2? Was bewirkt die Anweisung ...
Delphi-Quellcode:
sorry, aber ich bin nicht so gut in Delphi :-/
with tstr1 do begin
Duplicates := dupError; [...] end; |
Re: Prüfen ob Wörter in einem String vorkommen, Reihenfolge
Aike, du hast zwei Listen, die Du miteinander vergleichen willst; die Daten sind entweder schon in zwei Stringlisten gespeichert oder noch als Text, getrennt mit einem beliebigen Zeichen (zb [,] oder [Leerzeichen]).
Du willst entweder wissen, ob zumindest ein String in der Liste des anderen vorkommt (siehe Code) oder ob alle übereinstimmen. Anstatt mit einer for i:= ... Schleife durchzulaufen, kannst du das sie Stringlisten für dich erledigen lassen. Die Parameter Commatext1 und Commatext2 sind die beiden Listen; Delimiter gibt an, welches Zeichen die einzelnen Elemente trennt. Wichtig ist, daß
Delphi-Quellcode:
eingestellt ist, sonst klappt das ganze nicht so.
TStringList.Sorted := True
Mit der Eigenschaft TStringList.Duplicate kannst du angeben, wie eine Stringliste auf Duplikate reagieren soll (siehe Delphi-Hilfe); ein weitere Hinzufügen von Elementen mittels AddStrings oder Add wird dann entsprechend gesteuert (dupIgnore = nichts tun, dupError: Fehler auslösen, dupAccept = Duplikat hinzufügen); so erhälst Du durch:
Delphi-Quellcode:
True, sobald nur ein Element in der anderen Liste vorhanden ist.with tstr1 do begin Duplicates := dupError; try AddStrings(tstr2); Result := False; except Result := True; end; end; Oder, Du willst einen Vergleich auf ALLE Elemente: Du läßt alle Elemente hinzufügen, gibst aber an, daß Duplikate nicht erlaubt sind: Ist die Anzahl der Elemente vorher gleich hoch wie nachher, waren alle gleich:
Delphi-Quellcode:
klar?
with tstr1 do begin
Duplicates := dupIgnore; AnzahlElemente := tstr1.Count; AddStrings(tstr2); Result := (AnzahlElemente = tstr1.Count); end; sascha |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:15 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