Autor Beitrag
Michael78
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 20

WIN XP
D7 Prof
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 20

WIN XP
D7 Prof
BeitragVerfasst: 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?


ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1349
Erhaltene Danke: 1

Win XP
D5 Pers (SSL), D2005 Pro, C, C#
BeitragVerfasst: 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. :roll:
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
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 47

Win2000
D8SSL
BeitragVerfasst: Sa 16.10.04 08:50 
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 698



BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 20

WIN XP
D7 Prof
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1349
Erhaltene Danke: 1

Win XP
D5 Pers (SSL), D2005 Pro, C, C#
BeitragVerfasst: Sa 16.10.04 13:59 
Hallo Michael78,

für deine Frage fallen mir spontan zwei Lösungsmöglichkeit ein:
  1. Du teilst deinen Suchbegriff in mehrere Suchbegriffe auf und schaust (mit der Funktion Pos) ob die einzelnen Suchbegriffe vorhanden sind. Beispiel:
    ausblenden Quelltext
    1:
    2:
    3:
    Teilen bei: '.', ':', '-', ...
    Suchbegriff: Meta-morphose
    Suchbegriffe: Meta morphose
  2. Du erstellst mehrere verschiedene Suchzeichenketten und überprüfst jede einzelne ob sie zutrifft, oder nicht. Beispiel:
    ausblenden 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... :roll:
@MartinPb: Warum kompliziert, wenn es auch einfach geht? :lol:

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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1349
Erhaltene Danke: 1

Win XP
D5 Pers (SSL), D2005 Pro, C, C#
BeitragVerfasst: Sa 16.10.04 21:43 
Hier ein Beispiel zu 1:
ausblenden volle Höhe 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:
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 [',', ':', '.', '-', ' '])  //usw....
    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  //wenn nicht vorhanden
        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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 20

WIN XP
D7 Prof
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1349
Erhaltene Danke: 1

Win XP
D5 Pers (SSL), D2005 Pro, C, C#
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 20

WIN XP
D7 Prof
BeitragVerfasst: So 17.10.04 21:52 
Hab ich das jetzt richtig verstanden, ich schreibe diese Prozedur einfach über meine Suchen Prozedur?
wulfskin
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1349
Erhaltene Danke: 1

Win XP
D5 Pers (SSL), D2005 Pro, C, C#
BeitragVerfasst: Mo 18.10.04 06:58 
Genau :!:

_________________
Manche antworten um ihren Beitragszähler zu erhöhen, andere um zu Helfen.