CASE geht sogar mit Strings

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
siro
Beiträge: 730
Registriert: Di 23. Aug 2016, 14:25
OS, Lazarus, FPC: Windows 11
CPU-Target: 64Bit
Wohnort: Berlin

CASE geht sogar mit Strings

Beitrag von siro »

Hallo zusammen,
beim experimentieren habe ich grad festgestellt, dass die CASE Anweisung sogar mit Strings funktioniert.
Das kannte ich noch garnicht, gefällt mir aber ausgesprochen gut.

In den Beschreibungen habe ich "bisher" auch noch nichts darüber gefunden. Ich glaube bei Delphi ging das auch nicht.

Code: Alles auswählen

//------------------------------------------------------------------------------
// Es muss ermittelt werden um welchen Parameter es sich handelt, der
// vom Gerät KEL103 zurück gesendet wurde.
// Erstaunlicherweise funktioniert die case Anweisung sogar mit Strings,
// ich bin begeistert.
// Die Liste ist noch nicht vollständig, ich habe aber auch noch nicht alles erforscht

function GetMeasureOwner(const unitStr:string):integer;
begin
  case unitStr of
    'A'  : result:=1;   // Stromwert in Ampere
    'V'  : result:=2;   // Spannungswert in Volt
    'AH' : result:=3;   // Kapazität in Ampere Stunden
    'OHM': result:=4;   // Widerstand in Ohm
    'M'  : result:=5;   // Zeitwert in Minuten
    'ON' : result:=6;   // Eingangs Status Buchsen sind eingeschaltet !! auch BEEP
    'OFF': result:=7;   // Eingangs Status Buchsen sind ausgeschaltet  ! auch BEEP
    'CC' : result:=8;   // Constant Current Modus aktiv
    'CV' : result:=9;   // Constant Voltage Modus aktiv
    'CR' : result:=10;  // Constant Resistor Modus aktiv
    'CW' : result:=11;  // Constant Wattage (Power) Modus aktiv
    'BATTERY' : result:=12;     // Batterie testmodus aktiv
    'SHORt' : result:=13;       // Kurzschluss Modus aktiv
    'CONTINOUSCV' : result:=14; //
    'OPP' : result:=15;         // Over Power Protection

    else result:=0;   // ansonsten kann das Ergebnis nicht zugeordnet werden
   end; // case

end;

procedure TForm1.FormCreate(Sender: TObject);
var s:string;
begin
  s:='BATTERY';
  caption:=IntToStr(GetMeasureOwner(s));
end;                    
Siro
Grüße von Siro
Bevor ich "C" ertragen muß, nehm ich lieber Lazarus...

Benutzeravatar
theo
Beiträge: 10467
Registriert: Mo 11. Sep 2006, 19:01

Re: CASE geht sogar mit Strings

Beitrag von theo »

Das gibt es schon länger.
https://www.freepascal.org/docs-html/re ... 600013.2.2 (unten).

siro
Beiträge: 730
Registriert: Di 23. Aug 2016, 14:25
OS, Lazarus, FPC: Windows 11
CPU-Target: 64Bit
Wohnort: Berlin

Re: CASE geht sogar mit Strings

Beitrag von siro »

Danke Dir Theo für den LINK

Ich hatte nur diesen LINK mir angesehen:
https://wiki.freepascal.org/Case/de
da taucht das NOCH nicht auf.

Siro
Grüße von Siro
Bevor ich "C" ertragen muß, nehm ich lieber Lazarus...

wp_xyz
Beiträge: 4869
Registriert: Fr 8. Apr 2011, 09:01

Re: CASE geht sogar mit Strings

Beitrag von wp_xyz »

Doch. Aber nur nebenbei erwähnt,ohne Beispiel.

WICHTIG: Funktioniert nur im mode objfpc. Da zu gab's vor kurzem Verwirrung im internationalen Forum.

Benutzeravatar
theo
Beiträge: 10467
Registriert: Mo 11. Sep 2006, 19:01

Re: CASE geht sogar mit Strings

Beitrag von theo »

siro hat geschrieben:
Mi 7. Apr 2021, 15:43
Danke Dir Theo für den LINK

Ich hatte nur diesen LINK mir angesehen:
https://wiki.freepascal.org/Case/de
da taucht das NOCH nicht auf.
Ja, beim Wiki ist es halt eher Zufall, was da drin steht. Du kannst es ja ergänzen.
Die offizielle FPC Dokumentation ist da schon verlässlicher.
https://www.freepascal.org/docs-html/re ... fch13.html

Benutzeravatar
Winni
Beiträge: 1577
Registriert: Mo 2. Mär 2009, 16:45
OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
CPU-Target: 64Bit
Wohnort: Fast Dänemark

Re: CASE geht sogar mit Strings

Beitrag von Winni »

Hi!

Seit Version 2.6 gibt's case mit strings, aber nur im objfpc, nicht in Delphi.

Über die angeblich lausige Implementation wurde im internationalen Forum gestritten, ist mir aber egal. Hab Jahrzehnte auf das Feature gewartet.

International: https://forum.lazarus.freepascal.org/in ... ic=17983.0

Winni

Antworten