case of string

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
Scotty
Beiträge: 768
Registriert: Mo 4. Mai 2009, 13:24
OS, Lazarus, FPC: Arch Linux, Lazarus 1.3 r44426M FPC 2.6.4
CPU-Target: x86_64-linux-qt/gtk2
Kontaktdaten:

case of string

Beitrag von Scotty »

Seit wann geht denn so was?

Code: Alles auswählen

case edit1.text of
  'red'   : label1.caption:='rot';
  'green' : label1.caption:='grün';
  'blue'  : label1.caption:='blau';
  else label1.caption:=edit1.text;
end;
Nicht nur, dass der Compiler da nicht meckert, das funktioniert sogar! Bug oder Feature?
Edit: Sinnvolle Parameter eingesetzt :roll:
Zuletzt geändert von Scotty am Di 13. Okt 2009, 21:59, insgesamt 1-mal geändert.

bembulak
Beiträge: 370
Registriert: Di 6. Feb 2007, 09:29
OS, Lazarus, FPC: L0.9.29 SVN:24607 FPC 2.4.0-32 bit @ Win XP SP3
CPU-Target: 32bit i386, ARM
Wohnort: Oberösterreich

Re: case of string

Beitrag von bembulak »

Feature! Definitiv! Ist doch gut.

Scotty
Beiträge: 768
Registriert: Mo 4. Mai 2009, 13:24
OS, Lazarus, FPC: Arch Linux, Lazarus 1.3 r44426M FPC 2.6.4
CPU-Target: x86_64-linux-qt/gtk2
Kontaktdaten:

Re: case of string

Beitrag von Scotty »

Kann man sich drauf verlassen? Wegen der Delphi-Kompatibilität wohl dann, wenn es auch dort implementiert ist. Wäre eine nette Sache statt mehrfacher if then else 8)

Socke
Lazarusforum e. V.
Beiträge: 3178
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: case of string

Beitrag von Socke »

Scotty hat geschrieben:Kann man sich drauf verlassen? Wegen der Delphi-Kompatibilität wohl dann, wenn es auch dort implementiert ist. Wäre eine nette Sache statt mehrfacher if then else 8)
Das ist echt neu, obwohl man das vielleicht auch mit PtrInt-Typecasts in älteren Versionen basteln können (die Werte sind schließlich Konstanten). In der unit LCLProc habe ich die Funktion StringCase gefunden mit der man so was hätte realisieren können.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

Scotty
Beiträge: 768
Registriert: Mo 4. Mai 2009, 13:24
OS, Lazarus, FPC: Arch Linux, Lazarus 1.3 r44426M FPC 2.6.4
CPU-Target: x86_64-linux-qt/gtk2
Kontaktdaten:

Re: case of string

Beitrag von Scotty »

Hiermit geht es schon mal nicht: Lazarus 0.9.28 r21921 FPC 2.2.4 i386-win32-win32/win64

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6770
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: case of string

Beitrag von af0815 »

Scotty hat geschrieben:Hiermit geht es schon mal nicht: Lazarus 0.9.28 r21921 FPC 2.2.4 i386-win32-win32/win64
DAs heisst, es geht nur bei einem neueren FPC/Lazarus ?!
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

MacWomble
Lazarusforum e. V.
Beiträge: 999
Registriert: Do 17. Apr 2008, 01:59
OS, Lazarus, FPC: Mint 21.1 Cinnamon / FPC 3.2.2/Lazarus 2.2.4
CPU-Target: Intel i7-10750 64Bit
Wohnort: Freiburg

Re: case of string

Beitrag von MacWomble »

Info hierzu: http://bugs.freepascal.org/view.php?id=13700" onclick="window.open(this.href);return false;
Alle sagten, dass es unmöglich sei - bis einer kam und es einfach gemacht hat.

Euklid
Lazarusforum e. V.
Beiträge: 2808
Registriert: Fr 22. Sep 2006, 10:38
OS, Lazarus, FPC: Lazarus v2.0.10, FPC 3.2.0
Wohnort: Hessen
Kontaktdaten:

Re: case of string

Beitrag von Euklid »

Das halte ich mal für eine sinnvolle Neuerung!

- Euklid

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: case of string

Beitrag von pluto »

Sehr Praktisch. Wie oft wurde das schon als Mängel angesehen.
MFG
Michael Springwald

Socke
Lazarusforum e. V.
Beiträge: 3178
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: case of string

Beitrag von Socke »

Ich hätte mal ne Frage: Bezieht sich die Neuerung nur auf Strings, genauer auf String-Konstanten, oder könnte ich da jetzt auch mit Variablen und Klassen vergleichen?
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

Ralph59
Beiträge: 145
Registriert: So 22. Mär 2009, 07:48
OS, Lazarus, FPC: WIN 11 (momentan )
CPU-Target: 64 und 32Bit
Wohnort: Hessen
Kontaktdaten:

Re: case of string

Beitrag von Ralph59 »

Hallo,

also verbessert mich, fals ich etwas falsch verstehe:

case "ordinal / integer" of
end;

funktioniert natürlich.

Habe gerade nach unserem letzten Treffen mich durch einige features dazu hinreißen lassen doch auf 9.29 Beta mit FPC 2.2.4 über svn umzusteigen :wink:

Jetzt habe ich damit den oben aufgeführten Test durchgeführt
case edit1.text...
hatte jedoch eine (mehrere) Fehlermeldung :cry:

Dann bin ich her gegangen und habe ein simples Programm direct über fpc mit einer case of und writeln als Ausgabe laufen lassen.
Mit dem selben Resultat wie unter Lazarus. Welches mir eigendlich die Vermutung eher bestätigt, dass dieses feature eher vom compiler als vom Lazarus abhängig ist.

Liege hier falsch?


PS: Ich würde mir eine kleine udf schreiben, die mir das Problem über array's records oder Datentabellen sicher löst.

Mit freundlichem Gruß

Ralph
Fehler sind wie Berge, man steht auf dem Gipfel seiner eigenen und redet über die der anderen.

Socke
Lazarusforum e. V.
Beiträge: 3178
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: case of string

Beitrag von Socke »

Ralph59 hat geschrieben:Jetzt habe ich damit den oben aufgeführten Test durchgeführt
case edit1.text...
hatte jedoch eine (mehrere) Fehlermeldung :cry:

Dann bin ich her gegangen und habe ein simples Programm direct über fpc mit einer case of und writeln als Ausgabe laufen lassen.
Mit dem selben Resultat wie unter Lazarus. Welches mir eigendlich die Vermutung eher bestätigt, dass dieses feature eher vom compiler als vom Lazarus abhängig ist.

Liege hier falsch?


PS: Ich würde mir eine kleine udf schreiben, die mir das Problem über array's records oder Datentabellen sicher löst.

Mit freundlichem Gruß

Ralph
Du liegst vollkommen richtig, da Lazarus als RAD/IDE keine Einfluss auf die Sprache hat. für die Übersetzung ist allein der Compiler verantwortlich.
Eine Unit musst du dir nicht extra schreiben, weil es die entsprechenden Funktionen für Strings und Klassen bereits gibt (unit LCLProc; Funktionsname siehe irgendwo oben).
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

Ralph59
Beiträge: 145
Registriert: So 22. Mär 2009, 07:48
OS, Lazarus, FPC: WIN 11 (momentan )
CPU-Target: 64 und 32Bit
Wohnort: Hessen
Kontaktdaten:

Re: case of string

Beitrag von Ralph59 »

Hallo,
... Eine Unit musst du dir nicht extra schreiben, weil es die entsprechenden Funktionen für Strings und Klassen bereits gibt (unit LCLProc; Funktionsname siehe irgendwo oben).
ich hatte dabei auch nicht an eine neue Unit gedacht, sondern, ich habe mir gedacht, wofür kann man so etwas gebrauchen. Dabei hatte ich zum Beispiel an ein mehrsprachiges Menue oder etwas in der Art gedacht.

Hier ein kleines Beipiel mit einer kleinen Funktion:

Code: Alles auswählen

...
type
 
  { TForm1 }
 
  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    Label1: TLabel;
    procedure Button1Click(Sender: TObject);
    function acase(string1:string):string;
  private
    { private declarations }
  public
    { public declarations }
  end; 
 
var
  Form1: TForm1; 
 
implementation
 
{ TForm1 }
 
procedure TForm1.Button1Click(Sender: TObject);
 
begin
  // anstelle von case ... of
  label1.Caption:=acase(edit1.Text);
end;
 
function TForm1.acase(string1: string): string;
var
  atext1, atext2: array[0..5] of string;
  i:integer ;
begin
  // Datenfelder könnte auch eine Datenbank mit 3 Feldern id, eglisch, deutsch sein
  atext1[0]:='red';
  atext2[0]:='rot';
  atext1[1]:='blue';
  atext2[1]:='blau';
  atext1[2]:='green';
  atext2[2]:='grün';
  atext1[3]:='yellow';
  atext2[3]:='gelb';
  atext1[4]:='black';
  atext2[4]:='schwarz';
  atext1[5]:='orange';
  atext2[5]:='orange';
  Result := '';
  for i := 0 to High(atext1) do begin
    if atext1[i] = string1 then Result := atext2[i];
  end;
  if Result = ''  then Result:='Hallo Test';
end;
 
...
Mit freundlichem Gruß

Ralph
Fehler sind wie Berge, man steht auf dem Gipfel seiner eigenen und redet über die der anderen.

Scotty
Beiträge: 768
Registriert: Mo 4. Mai 2009, 13:24
OS, Lazarus, FPC: Arch Linux, Lazarus 1.3 r44426M FPC 2.6.4
CPU-Target: x86_64-linux-qt/gtk2
Kontaktdaten:

Re: case of string

Beitrag von Scotty »

Was man da bei variant records machen kann... :shock:

Ralph59
Beiträge: 145
Registriert: So 22. Mär 2009, 07:48
OS, Lazarus, FPC: WIN 11 (momentan )
CPU-Target: 64 und 32Bit
Wohnort: Hessen
Kontaktdaten:

Re: case of string

Beitrag von Ralph59 »

Hallo,

ich habe ja nicht esagt, das ich 'Record' wirklich nutzen würde. Ich würde auch keine Array's nutzen. In solch einem Fall würde ich immer auf eine Datentabelle zugreifen. Wenn es gewünscht ist, dann kann ich ja gerne mal ein kleines Beispiel mit Records schreiben :oops:

Siehe: http://www.delphibasics.co.uk/RTL.asp?Name=Record


Mit freundlichem Gruß


Ralph
Fehler sind wie Berge, man steht auf dem Gipfel seiner eigenen und redet über die der anderen.

Antworten