Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Library: Object-Pascal / Delphi-Language (https://www.delphipraxis.net/35-library-object-pascal-delphi-language/)
-   -   Delphi Strings bei einer Case-Abfrage nutzen (https://www.delphipraxis.net/479-strings-bei-einer-case-abfrage-nutzen.html)

CalganX 27. Jul 2002 17:08


Strings bei einer Case-Abfrage nutzen
 
Viele stört es, dass man nur Variablen vom Typ Char in einer Case-Abfrage nutzen kann. Aber: in Delphi braucht man keine Hundert-if-Abfragen zu machen. Und so gehts:
Delphi-Quellcode:
uses {...}, TypInfo, {...};

type
  TSuchmaschine = (tcv_Lycos, tcv_Google, tcv_Yahoo, tcv_Fireball);
procedure TForm1.Button1Click(Sender: TObject);
var
  s: string;
begin
  s := ComboBox1.Text;
  case TSuchmaschine(GetEnumValue(TypeInfo(TSuchmaschine), 'tcv_' + S)) of
    tcv_Lycos: ShowMessage('http://www.lycos.de');
    tcv_Google: ShowMessage('http://www.google.de');
    tcv_Yahoo: ShowMessage('http://www.yahoo.de');
    tcv_Fireball: ShowMessage('http://www.fireball.de');
  else
    ShowMessage('Keine Suchmaschine angegeben');
  end;
end;
Dabei ist die Groß- und Kleinschreibung egal!

Quelle: http://www.swissdelphicenter.ch

Chris1308

jbg 27. Jul 2002 17:30

Na da kenne ich eine Lösung mit weniger Programmieraufwand.
Delphi-Quellcode:
function CaseStringOf(const Value: string; const Args: array of string): string;
begin
  for Result := High(Args) downto 0 do
    if Value = Args[Result] then Break;
end;
Und das ganze case-insensitive:
Delphi-Quellcode:
function CaseStringIOf(const Value: string; const Args: array of string): string;
begin
  for Result := High(Args) downto 0 do
    if CompareText(Value, Args[Result]) = 0 then Break;
end;
Diese ist
1. Schneller, da nicht die RTTI benötigt wird
2. Einfache zu handhaben:
Delphi-Quellcode:
case CaseStringOf(S, ['Str1', 'Str2', 'Str3']) of
  0: // Str1
  1: // Str2
  2: // Str3
  else ...
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:54 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz