AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Prüfen ob Wörter in einem String vorkommen, Reihenfolge egal

Prüfen ob Wörter in einem String vorkommen, Reihenfolge egal

Ein Thema von Gambit · begonnen am 23. Aug 2004 · letzter Beitrag vom 19. Okt 2004
Antwort Antwort
Seite 3 von 4     123 4   
Gambit

Registriert seit: 28. Mai 2003
680 Beiträge
 
Delphi 7 Professional
 
#21

Re: Prüfen ob Wörter in einem String vorkommen, Reihenfolge

  Alt 23. Aug 2004, 22:34
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
  Mit Zitat antworten Zitat
Gambit

Registriert seit: 28. Mai 2003
680 Beiträge
 
Delphi 7 Professional
 
#22

Re: Prüfen ob Wörter in einem String vorkommen, Reihenfolge

  Alt 23. Aug 2004, 23:47
@ 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:

select * from Table2 where (Titel like '%SList[0]%') and (Titel like '%SList[1]%') usw. Damit habe ich zumindest die Gewähr, dass alle Wörter in dem String der Table2 vorkommen müssen, egal in welcher Reihenfolge.

So in Etwa, wenn ich nicht zu müde bin. Werds morgen mal ausprobieren...

Guts Nächtle

Gambit
  Mit Zitat antworten Zitat
Benutzerbild von lume96
lume96

Registriert seit: 14. Sep 2003
Ort: Rognac/Marseille - Frankreich
128 Beiträge
 
Delphi 7 Professional
 
#23

Re: Prüfen ob Wörter in einem String vorkommen, Reihenfolge

  Alt 24. Aug 2004, 08:42
Sollte klappen, z.B. so :
Delphi-Quellcode:
   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);
Tschüss,
Lutz
Lutz Meyer
  Mit Zitat antworten Zitat
Gambit

Registriert seit: 28. Mai 2003
680 Beiträge
 
Delphi 7 Professional
 
#24

Re: Prüfen ob Wörter in einem String vorkommen, Reihenfolge

  Alt 24. Aug 2004, 08:48
genau so hatte ich mir das gedacht!

Besten dank nochmal für die Hilfe, das gilt nat. für alle!

Gambit
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

Registriert seit: 23. Mär 2003
Ort: Münster
3.750 Beiträge
 
Delphi 2010 Professional
 
#25

Re: Prüfen ob Wörter in einem String vorkommen, Reihenfolge

  Alt 24. Aug 2004, 08:58
Zitat von Robert_G:
Falls du ein wenig in .Net interessiert bist...

Ich habe gerade aus "Jux" das Ganze mal in C#2.0 gebastelt (die Beta gibt's kostenlos bei M$ )
Es ist nicht wirklich "hübsch", war aber in 10 Minuten fertig. (mit "IntelliSense tippt man schneller als ein MaiKäfer husten kann )
Hoi,

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)
Ich bin mir sicher, dass das Menü meine Sicherheit gefährdet

mfG
mirage228
David F.

May the source be with you, stranger.
PHP Inspection Unit (Delphi-Unit zum Analysieren von PHP Code)
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#26

Re: Prüfen ob Wörter in einem String vorkommen, Reihenfolge

  Alt 24. Aug 2004, 10:43
Zitat von mirage228:
Ich bin mir sicher, dass das Menü meine Sicherheit gefährdet
Jupp, ist ein CIA Menü
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.
  Mit Zitat antworten Zitat
Aike

Registriert seit: 2. Okt 2004
319 Beiträge
 
#27

Re: Prüfen ob Wörter in einem String vorkommen, Reihenfolge

  Alt 7. Okt 2004, 20:07
Ich finde das alles sehr kompliziert und versuche mehr durch Raten als durch Wissen zum Ziel zu kommen

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;
Achim
  Mit Zitat antworten Zitat
SaschaM

Registriert seit: 7. Okt 2004
Ort: Wien
5 Beiträge
 
#28

Re: Prüfen ob Wörter in einem String vorkommen, Reihenfolge

  Alt 7. Okt 2004, 23:11
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:
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;
[edit=Luckie][ delphi]-Tags eingefügt. Beim nächsten mal bitte selber machen. Mfg, Luckie[/edit]
  Mit Zitat antworten Zitat
Aike

Registriert seit: 2. Okt 2004
319 Beiträge
 
#29

Re: Prüfen ob Wörter in einem String vorkommen, Reihenfolge

  Alt 8. Okt 2004, 17:19
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:
with tstr1 do begin
  Duplicates := dupError;
  [...]
end;
sorry, aber ich bin nicht so gut in Delphi :-/
Achim
  Mit Zitat antworten Zitat
SaschaM

Registriert seit: 7. Okt 2004
Ort: Wien
5 Beiträge
 
#30

Re: Prüfen ob Wörter in einem String vorkommen, Reihenfolge

  Alt 8. Okt 2004, 17:49
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ß

TStringList.Sorted := True eingestellt ist, sonst klappt das ganze nicht so.

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:
     
with tstr1 do begin
   Duplicates := dupError;
   try
      AddStrings(tstr2);
      Result := False;
   except
      Result := True;
   end;
end;
True, sobald nur ein Element in der anderen Liste vorhanden ist.

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:
with tstr1 do begin
   Duplicates := dupIgnore;
   AnzahlElemente := tstr1.Count;
   AddStrings(tstr2);
   Result := (AnzahlElemente = tstr1.Count);
end;
klar?
sascha
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 21:28 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