Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - case schleife mit strings ??


matze - Fr 20.09.02 16:33
Titel: case schleife mit strings ??
Hallo !!!

Wie kann ich in einer Case schleife einen String auswerten lassen ??
Ich hab erst gedacht so:

Quelltext
1:
2:
3:
4:
 case mystring of
'bla': tuewas;
'blabla': tuenaochwas;
end;


Allerdings sagt mir Delph das die Variable vom Typ Ordinal sein muss. Srich: Aufzählbar. Wie kann ich eine Case anweisung so verwenden wie ich das oben wollte ??


Anonymous - Fr 20.09.02 17:23

Soweit ich es weiß geht es nicht anders. Tipp: versuch es mal mit IF THEN. Soll auch gut sein :D .


matze - Fr 20.09.02 19:08

nein, weil ich will folgenes machen: eninen kleine kommandozeilen interpreter, der auf bestimmte befehle reagiert. Und das wäre mit case echt komfortabler


Delete - Fr 20.09.02 19:43

Zitat:

Dieser Tipp stammt von http://www.eggcentric.com/Fn_StringIndex.htm

Case-Anweisungen unterstützen leider keine Strings. Mit der Function StringIndex
gibt es eine elegante Möglichkeit dies zu ändern.

Beispiel bisher:

Quelltext
1:
2:
3:
  if Name = 'Hugo' then mach_was_mit_Hugo
  else if Name = 'Gabi' then mach_was_mit_Gabi
  else Hinweis_auf_unbekannten_Namen;


Beispiel neu:

Quelltext
1:
2:
3:
4:
5:
case StringIndex(Name, ['Hugo', 'Gabi']) of
    0: mach_was_mit_Hugo;
    1: mach_was_mit_Gabi;
    else Hinweis_auf_unbekannten_Namen;
  end;


Hier ist die Function StringIndex

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
//-------------------------------------------------------------------------
// Mit der Funktion StringIndex läßt sich die Position eines bestimmten
// Strings in einem Array ermitteln.
//
// Parameter: such = Der String, nach dem das Array durchsucht wird
//             aos = String-Array das durchsucht werden soll
// Ergebnis: Die Position wo der String gefunden wurde.
//           Wurde der String nicht gefunden, so ist das Ergebnis -1
//
// Der String-Vergleich unterscheidet nicht zwischen Groß/Kleinschreibung
//-------------------------------------------------------------------------
function StringIndex(such: string; aos: array of string): integer;
begin
  for Result := high(aos) downto 0 do if AnsiSameText(such, aos[Result]) then break;
end;



matze - Fr 20.09.02 22:03

danke ! werds mal testen !