Uses .....,StrUtils; // wird zusätzlich benötigt für die Funktion AnsiIndexStr
var
TT: array[0..3] of string = ('Giraffe', 'Affe', 'Maus','Tiger');
T : String;
Operator in (const AText:string;const AValues: array of string):Boolean;
begin
Result := AnsiIndexStr(AText,AValues) <> -1;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
T:='Affe';
if (T in TT) then Caption:='Jo, is drin';
end;
Grüße von Siro Bevor ich "C" ertragen muß, nehm ich lieber Lazarus...
SL:=TStringList.Create;
SL.Sorted:=true;
SL.StrictDelimiter:=true;
SL.DelimitedText:='Giraffe,Affe,Maus,Tiger';
if SL.IndexOf('Tiger')>-1 then ShowMessage('Tiger ist drin');
SL.Free;
hui, Danke für die Vorschläge, funktionieren super!
Pos() ist tatsächlich sehr schlank, da hätte ich eigentlich drauf kommen sollen, zumal ich den Befehl buchstäblich eine Zeile später im Quellcode habe...
Ich werde wohl zu Vorschlag #1 greifen, denke ich, weil mir die Idee gefällt, alles zentral in unter var bzw. const zu verwalten. Die Möglichkeit, Operatoren zu definieren kannte ich auch noch nicht; das gibt gleich Anlass zum Weiterlesen. Ich hoffe mal, StrUtils zerschiesst mir nicht etablierte Syntax, aber bis jetzt sieht alles gut aus.
type
TElement = (Affe, Giraffe, Loewe, Papagei);
TElSet = set of TElement;
function isStringInSet(s : string; se : TElSet) : boolean;
var e : TElement;
s1 : string;
begin
Result := False;
for e := Affe to Papagei do
begin
WriteStr(s1, e);
if (AnsiCompareText(s, s1) = 0) then
begin
Result := True;
exit;
end;
end;
end;
program Project1;
uses
StrUtils;
var
TElement: array[0..3] of string = ('Giraffe', 'AffE', 'Maus','Tiger'); // AffE mit großem E
begin
//if IndexText('Affe', TElement) <> -1 then // The comparison is done case insensitively.
if IndexStr('Affe', TElement) <> -1 then // Searches, observing case, for a string in an array of strings.
begin
WriteLn('gefunden');
end
else
begin
WriteLn('nicht gefunden');
end;
ReadLn;
end.