@Mabuse:
Delphi-Quellcode:
// statt '#' kann natürlich auch alles andere genommen werden ;-)
if pos('#'+Bezeichnung+'#', '#rohr#schraube#schraubendreher#')>0 then ....
ja könnte man, zb.
if pos('-' + Bezeichnung + '-', '-rohr-schraube-schraubendreher-')>0 then ....
ups das hatte ich doch schon 4 Threads vorher gepostet
[edit]
Mist, hat Mabuse auch schon erkannt.
Liest überhaupt einer die blöde rote Box bevor man postet, ich nicht
[/edit]
Die beste Lösung ist die 2. von Mabuse, aus Sicht des besten Codes, allerdings mit kleinen Änderungen:
Delphi-Quellcode:
function IndexOf(const Value: String; const List: array of String): Integer;
var
I: Integer;
begin
Result := -1;
for I := Low(List) to High(List) do
if Value = List[I] then
begin
Result := I;
Break;
end;
end;
procedure TestIt(Bezeichnung: String);
begin
case IndexOf(Bezeichnung, ['rohr', 'schraube', 'schraubendreher']) of
0: machwas; // 1. String (rohr)
1: machwas; // 2. String (schraube)
2: machwas; // 3. String (schraubendreher)
-1: machnichts; // nicht gefunden
end;
end;
1.) const Parameter machen die Sache effizienter vom erzeugten Code. Besonders beim const List: array of String ist das enorm wichtig. Denn nun wird unser Array[] im Source das wir übergeben -> ['rohr', 'schraube', 'schraubendreher'] durch den Compiler hardcoded als fertiges Array[] im Code abgelegt. Also auch wenn man vermuten würde das zur Laufzeit unser dynamisches Array[] erst erzeugt wird und die 3 Strings darin eingefügt werden, so passiert eben dies nicht. Aber nur wenn wir konstante Arrays[] benutzen. Denn wenn nicht so wird die Funktion IndexOf() uU. eine komplette Kopie des übergebenen Atrrays anlegen.
2.) du musst nicht zweimal in der Liste Suchen, ein case of reicht aus, also ohne if then vorher.
Gruß Hagen