BEGIN SEQUENCE in Codeblocks

Alle Fragen um die Programmierung, die sich sonst nicht kategorisieren lassen. Von Makro bis Codeblock, von IF bis ENDIF

Moderator: Moderatoren

Antworten
Benutzeravatar
klammerauf
UDF-Programmierer
UDF-Programmierer
Beiträge: 69
Registriert: Do, 08. Feb 2007 14:16
Wohnort: Karlsruhe
Hat sich bedankt: 3 Mal

BEGIN SEQUENCE in Codeblocks

Beitrag von klammerauf »

Hallo zusammen,

ich überlege gerade ob es nicht möglich wäre, innerhalb eines Codeblocks mit BEGIN SEQUENCE zu arbeiten.

Code: Alles auswählen

bCodeBlock := {|x,y|BEGIN SEQUENCE, x/y, ENDSEQUENCE}
EVAL( bCodeBlock, 10, 0 )
Mir ist schon klar, dass das im Code so nicht geht. Aber wird aus den ganzen SET-Befehlen sowie auch aus BEGIN SEQUENCE im Precompiler nicht eine Funktion draus? Eventuell könnte ich im Codeblock die Funktionsaufruf-Äquivalente verwenden.

Kann mir jemand sagen, ob BEGIN SEQUENCE im Precompiler umgewandelt wird?
Exzessiver Codeblock Programmierer
--
Grüße
Sebastian
Benutzeravatar
Marcus Herz
1000 working lines a day
1000 working lines a day
Beiträge: 852
Registriert: Mo, 16. Jan 2006 8:13
Wohnort: Allgäu
Hat sich bedankt: 39 Mal
Danksagung erhalten: 192 Mal
Kontaktdaten:

Re: BEGIN SEQUENCE in Codeblocks

Beitrag von Marcus Herz »

begin seuqnce wird nicht vom Precompiler umgesetzt.
Du kannst aber im Codeblock eine Funktion aufrufen:
So verhinderst du eine Meldung bei Div. durch 0,

Code: Alles auswählen

bCodeBlock := {|x,y| myFunction(x,y)}

static func myFunction(x,y)
local nRet := 0
local bErr := Errorblock(|| break()})
BEGIN SEQUENCE
nRet := x/y
ENDSEQUENCE
Errorblock(bRet)
return nRet
Gruß Marcus

Erkenne, was du findest, dann weißt du, wonach du gesucht hast
Benutzeravatar
Marcus Herz
1000 working lines a day
1000 working lines a day
Beiträge: 852
Registriert: Mo, 16. Jan 2006 8:13
Wohnort: Allgäu
Hat sich bedankt: 39 Mal
Danksagung erhalten: 192 Mal
Kontaktdaten:

Re: BEGIN SEQUENCE in Codeblocks

Beitrag von Marcus Herz »

bzw. wenn s wirklich nur um Division durch 0 geht

Code: Alles auswählen

bCodeBlock := {|x,y| if(! y <> 0, x/y,  0)}
EVAL( bCodeBlock, 10, 0 )
es gibt ja kein Ergebnis bei /0, aber 0 als Returnwert ist dann meist programmtechnisch ok.
Gruß Marcus

Erkenne, was du findest, dann weißt du, wonach du gesucht hast
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14656
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

Re: BEGIN SEQUENCE in Codeblocks

Beitrag von Jan »

Hallo Sebastian,

wenn Du den Compilerschalter /p setzt schreibt der beim compilieren eine .ppo. In der all das steht, was der Precompiler aus Deinem Code macht. So kannst Du das ganz schnell mal kontrollieren.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9367
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 102 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Re: BEGIN SEQUENCE in Codeblocks

Beitrag von Tom »

Die Division durch Null ergibt zwar keinen Wert, aber im täglichen Betrieb kann's mal versehentlich vorkommen, und da ist dann Null als Ergebnis auch okay. Und um das zu erreichen, baut man's in die ErrorSys() (bzw. in den von ihr aufgerufenen Standard-Errorhandler):

Code: Alles auswählen

(...)
CASE oError:genCode == XPP_ERR_ZERODIV
      RETURN 0
(...)
Das wird auch schon so ausgeliefert, meine ich. Oder wurde.
Herzlich,
Tom
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14656
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

Re: BEGIN SEQUENCE in Codeblocks

Beitrag von Jan »

Ist immer noch so

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Antworten