PDA

View Full Version : free-format unterschiedliche Felddefinitionen



Seiten : [1] 2

lucullus
10-08-12, 08:09
Moin, moin,

folgende Anforderung kann ich zur Zeit nur mit einem workaround (zumindest nach meiner Ansícht) lösen.
˜************************************************ ***************** €
D BPER s 8 0 inz(20120817)
D ##BP s 6 0 inz(*zeros)
Der Inhalt von BPER soll jetzt linksbündig in ##BP eingestellt werden. Wenn ich die Handbücher richtig verstanden habe, sollte eine enfache Zuweisung (eval) ausreichen.

Folgendes führt aber immer zu einem Programmabbruch:

/free

dsply bper;
//##bp = %dec(%subst(%char(bper):1:6):6:0);
##bp = bper;
dsply ##bp;

*inlr = *on;

/end-free
Auskommentiert habe ich meinen workaround.

Im "klassischen" RPG konnte ich so etwas mit einem "move" lösen. Gibt es im free-format eine "elegantere" Lösung?

Schon mal schönen Dank Eure Anregungen
Gruß

Andreas

Fuerchau
10-08-12, 08:42
Ein Eval führt zu einem Dezimalüberlauf was zu dem MCH-Fehler führt, da der Eval als Z-Add ausgeführt wird.
MOVE hat rechtsbündig übertragen und den Rest halt abgeschnitten. Ein Z-Add hätte den selben Fehler ausgelöst.

Du kannst das halt nur mit einer Overlay-Definition lösen:

D DS
D BPER 8 0
D ##BP 6 0 overlay(BPER:3)

Dann sparst du dir den Eval.

RobertMack
10-08-12, 09:21
Interessehalber: was gefällt Dir an an
##bp=%Dec(%Subst(%Char(bper):1:6):6:0) nicht?

andreaspr@aon.at
10-08-12, 10:15
Wieso überhaupt so kompliziert?

##BP = BPER / 100; ;)

lg Andreas

lucullus
10-08-12, 10:33
Moin, moin,

vielen Dank an Alle!

Der overlay ist mir nicht in den Sinn gekommen, aber das gefällt mir!

Am workaround gefällt mir "massive" Tiparbeit nicht -> Fehlerquelle :D

Schöness WE allen.

Gruß

Andreas

Fuerchau
10-08-12, 11:31
@Andreas
Damit bekommst du nur den linken Teil, es soll aber der Rechte Teil ermittelt werden.

andreaspr@aon.at
10-08-12, 11:53
@Andreas
Damit bekommst du nur den linken Teil, es soll aber der Rechte Teil ermittelt werden.
Ich dachte dass das die Anforderung ist?
Kann ja sein dass ich grad an legasthenie leide, aber %Subst(%Char(bper):1:6) liefert meines wissens den Linken Teil.

Außerdem

Der Inhalt von BPER soll jetzt linksbündig in ##BP eingestellt werden.

Fuerchau
10-08-12, 11:58
Jepp, das habe ich ja doch überlesen ;).

BenderD
10-08-12, 12:38
... das Problem ist doch das lesen, nicht das schreiben!!!
fixed format:
move tuch hut
dsply hut
* zeigt Kaninchen vor, erst zu verstehen, wenn man die Deklaration von tuch und hut liest!!!

Overlay ds noch schlimmer!!!
eval hut = tuch;
dsply kaninchen;

jetzt ist sogar der Zusammenhang zwischen kaninchen und hut nur noch in der Deklaration (an völlig anderer Stelle) zu finden.

D*B

der schon weiß, warum für ihn RPG keine ordentliche Programmiersprache ist!

RobertMack
10-08-12, 13:17
Ähem,

wären wir zweisprachig, könnten wir durchaus Gefallen an der selbsterklärenden Schreibweise finden. Das läse sich dann so:

BuchungsPeriodeJ4M2 = %Ziffern(%TeilAus(%Zeichenfolge(Datum8nEur):1:6):6 :0);

:D