| Autor |
Beitrag |
Michael78
      
Beiträge: 20
WIN XP
D7 Prof
|
Verfasst: Fr 15.10.04 20:51
wie kann ich bei einer Suche die Groß- und Kleinschreibung umgehen und die Sonderzeichen!
z.B. Michael = ListBox-Eintrag
MICHAEL_ = EditSuche-Eintrag
|
|
Michael78 
      
Beiträge: 20
WIN XP
D7 Prof
|
Verfasst: Fr 15.10.04 21:14
Bisher sieht mein Quelltext wie folgt aus, dass Problem ist das wenn ein Buchstabe nicht stimmt, erkennt er den Film nicht in der Liste!
Weiß da jemand Rat?
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26:
| var i:Integer; gefunden:Boolean; begin if key=VK_Return then begin gefunden:=False; for i:=0 to LbListe.Items.Count-1 do begin if EdtSuche.Text=LbListe.Items[i] then begin LbListe.Selected[i]:=True; gefunden:=True; end; end; if gefunden=False then begin application.MessageBox('Film nicht in der Liste','Filmliste'); EdtneuerFilm.Clear; EdtneuerFilm.SetFocus; end; end; end; |
|
|
wulfskin
      
Beiträge: 1349
Erhaltene Danke: 1
Win XP
D5 Pers (SSL), D2005 Pro, C, C#
|
Verfasst: Sa 16.10.04 01:01
Also die Groß- und Kleinschreibung kannst du umgehen, wenn du CompareText benutzt. Bsp.: if CompareText(EdtSuche.Text, LbListe.Items[i]) = 0 Was du mit Sonderzeichen meinst, ist mir noch nicht ganz klar.
Aber ich denke, da können wir dir auch helfen, wenn du das etwas näher erklärst.
Gruß Hape!
_________________ Manche antworten um ihren Beitragszähler zu erhöhen, andere um zu Helfen.
|
|
pascal4free
      
Beiträge: 47
Win2000
D8SSL
|
Verfasst: Sa 16.10.04 08:50
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| var suchwort: string; i: integer; begin suchwort:=edit1.text; for i:=0 to listbox1.items.Count-1 do begin if comparetext(suchwort, listbox1.Items[i])=0 then Listbox1.Selected[i]:=true; end; end; |
probiers mal damit. klappt bei mir mit gängigen sonderzeichen (@,€,ß,ö,& etc), Groß- und Kleinschreibung ist auch egal
|
|
MartinPb
      
Beiträge: 698
|
Verfasst: Sa 16.10.04 09:51
Zum Thema der Groß- und Kleinschreibung gibt es da einige Möglichkeiten.
Gehen wir von IF-Abfrage aus. Hier gibt es drei gute Stringfunktionen:
UPCase ist für einzelne Zeichen (Char) und macht sie groß: if UPCase('a') = 'A' then ... Allerdings wird hier nur der ASCII Zeichensatz beachtet. Sonderzeichen wie z.B. "ä" sind nicht ein Teil des ASCII Zeichensatzes.
UpperCase und LowerCase sind für ganze Zeichenketten (Strings) und machen sie groß oder klein: if (UpperCase('abc') = 'ABC') OR (LowerCase('ABC') = 'abc') then ... Allerdings wird auch hier nur der ASCII Zeichensatz beachtet.
AnsiUpperCase und AnsiLowerCase sind für ganze Zeichenketten (Strings) und machen sie groß oder klein: if AnsiUpperCase('äbc') = 'ÄBC' then ... Hier wird der ANSI Zeichensatz beachtet, d.h. es können auch Sonderzeichen verglichen werden.
Dann gibt es noch CompareText und CompareStr. Der Erste vergleicht ohne auf Groß- und Kleinschreibung zu achten, der Zweite achtet auf diese. Bei CompareText wird eine Ansi Prüfung vorgenommen.
_________________ Gruß
Martin
|
|
Michael78 
      
Beiträge: 20
WIN XP
D7 Prof
|
Verfasst: Sa 16.10.04 10:37
Ja danke das funktioniert soweit, aber wie kriege ich es jetzt hin, dass z.B.
keine Leerzeichen oder Bindestriche bei der Suche miteinbezogen werden.
Beispiel:
CSI - Staffel 1 (steht in der Listbox);
CSI Staffel1 (steht im EdtSuche);
|
|
wulfskin
      
Beiträge: 1349
Erhaltene Danke: 1
Win XP
D5 Pers (SSL), D2005 Pro, C, C#
|
Verfasst: Sa 16.10.04 13:59
Hallo Michael78,
für deine Frage fallen mir spontan zwei Lösungsmöglichkeit ein: - Du teilst deinen Suchbegriff in mehrere Suchbegriffe auf und schaust (mit der Funktion Pos) ob die einzelnen Suchbegriffe vorhanden sind. Beispiel:
Quelltext 1: 2: 3:
| Teilen bei: '.', ':', '-', ... Suchbegriff: Meta-morphose Suchbegriffe: Meta morphose | - Du erstellst mehrere verschiedene Suchzeichenketten und überprüfst jede einzelne ob sie zutrifft, oder nicht. Beispiel:
Quelltext 1: 2:
| Suchbegriff: meta-morphose Suchbegriffe: meta-morphose, metamorphose, meta morphose, meta:morphose, meta - morphose, usw... |
Jetzt liegt es an dir, welche der beiden Möglichkeiten bevorzugst. Versuch erstmal alleine klar zu kommen, ansonsten schreib nochmal hier rein.
@pascal4free: Wer lesen kann ist klar im Vorteil...
@MartinPb: Warum kompliziert, wenn es auch einfach geht?
Gruß Hape!
P.S: Achja, wenn du mit "Sonderumlauten" arbeitest (ü, ö, ä), dann benutze liebe AnsiCompareText.
_________________ Manche antworten um ihren Beitragszähler zu erhöhen, andere um zu Helfen.
|
|
wulfskin
      
Beiträge: 1349
Erhaltene Danke: 1
Win XP
D5 Pers (SSL), D2005 Pro, C, C#
|
Verfasst: Sa 16.10.04 21:43
Hier ein Beispiel zu 1: 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45:
| procedure SplitSearchString(Search: String; var SL: TStringList); var I: Integer; S: String; begin Search := Trim(Search); S := ''; for I := 1 to Length(Search) do begin if (Search[I] in [',', ':', '.', '-', ' ']) or (I = Length(Search)) then begin S := Trim(S); if Length(S) > 0 then SL.Add(S); S := ''; end else S := S + Search[I]; end; end;
var J: Integer; SL: TStringList; B: Boolean;
gefunden:=False; SL := TStringList.Create; try SplitSearchString(EdtSuche.Text, SL); for i:=0 to LbListe.Items.Count-1 do begin B := True; for J := 0 to SL.Count - 1 do begin if Pos(SL.Strings[J], LbListe.Items[i]) = 0 then B := False; end; if B then begin LbListe.Selected[i]:=True; gefunden:=True; end; end; finally SL.Free; end; | Viele Grüße,
Hans-Peter
_________________ Manche antworten um ihren Beitragszähler zu erhöhen, andere um zu Helfen.
|
|
Michael78 
      
Beiträge: 20
WIN XP
D7 Prof
|
Verfasst: So 17.10.04 21:07
Danke Wulfskin,
aber ich merke bei mir sind noch sehr große Defizite vorhanden!
Wahrscheinlich für euch keine ernsthafte Frage, aber wo kommt die Prozedur SplitSearchString her?
|
|
wulfskin
      
Beiträge: 1349
Erhaltene Danke: 1
Win XP
D5 Pers (SSL), D2005 Pro, C, C#
|
Verfasst: So 17.10.04 21:50
Irgendwo über deine Prozedur. Am besten direkt darüber, dann kannst du nix falsch machen!
Gruß Hape!
_________________ Manche antworten um ihren Beitragszähler zu erhöhen, andere um zu Helfen.
|
|
Michael78 
      
Beiträge: 20
WIN XP
D7 Prof
|
Verfasst: So 17.10.04 21:52
Hab ich das jetzt richtig verstanden, ich schreibe diese Prozedur einfach über meine Suchen Prozedur?
|
|
wulfskin
      
Beiträge: 1349
Erhaltene Danke: 1
Win XP
D5 Pers (SSL), D2005 Pro, C, C#
|
Verfasst: Mo 18.10.04 06:58
Genau 
_________________ Manche antworten um ihren Beitragszähler zu erhöhen, andere um zu Helfen.
|
|