PDA

View Full Version : String Verarbeitung Free Format



Seiten : [1] 2

co_steffl
08-12-09, 08:14
Hallo zusammen,

ich stolper mal wieder über ein Problem.
Ich habe ein 5 stellige Alpha Feld in einer Maske. Dieses Feld muß gefüllt werden mit einer Uhrzeit: z.B: 08:05

Nun habe ich numerische Felder in denen die Zeit steht. (z.B. #_rem s 5 0) Da die 8 aus dem numerischen Feld mit Eval ganz links stehen würde habe ich probiert mit
%Subst eine Null davor zu setzen.

Wenn ich nun diese Folge benutze funktionert das: (für die Minuten)

%subst(d_zbb:4:1) = '0';
%subst(d_zbb:5:1) = %char(#_rem);

Dagegen das hier nicht ?

%subst(d_zbb:4:1) = '0' + %char(#_rem);

oder

%subst(d_zbb:4:1) = '0' + %subst(d_zbb:5:1) = %char(#_rem);

Geht das nicht in Verbindung mit %Subst ??? Oder mache ich hier einen Denkfehler :confused:

Gruß co_steffl

woki
08-12-09, 08:25
warum machst du es nicht so:
rechtsbündig füllen mit
evalR d_zbb = %char(#_rem);
und dann ggf. links mit Nullen auffüllen mit
d_zbb = %xlate(' ':'0':d_zbb);

co_steffl
08-12-09, 08:29
Hi Woki

danke für die Antwort.

Klar. Viele Wege führen nach Rom :)

Auch deiner. Aber was mich mehr interessiert, ist die Tatsache das es scheinbar in Verbindung mit %subst nicht funktioniert!

co_steffl

woki
08-12-09, 08:37
Bei den foldenfen Statements
%subst(d_zbb:4:1) = '0' + %char(#_rem);
%subst(d_zbb:4:1) = '0' + %subst(d_zbb:5:1) = %char(#_rem);
füllst du ja nur die 4. Position (4:1), und das mit einem Wert, der länger als eine Position ist. Das geht so nicht. Hier wird nur die 4. Stelle gefüllt mit der ersten Stelle aus deinem Ausdruck ('0' + %char(#_rem) bzw. '0' + %subst(d_zbb:5:1) = %char(#_rem)).

welchen Wert hat denn die Variable #_rem, und welchen Wert soll d_zbb bekommen?

co_steffl
08-12-09, 08:46
Das geht doch auch (+ plus ist verkettung)

Vorher

#_REST = 00005.
d_zbb = '_____'


d_zbv = '0' + %char(#_rest) + ':';

Nachher

D_ZBV = '05: '


Ich verkette hier 0 (Null) auf Position 4 mit #_rem (Sollte so gehen wie oben #_rem auf Position 5)

Das hier geht ja auch nicht !!

%subst(d_zbb:4:1) = '0' + %subst(d_zbb:5:1) = %char(#_rem);

woki
08-12-09, 08:50
du must das in 2 Schritten machen:
1. setze 4. Position von d_zbb
2. setze 5. Position von d_zbb

%subst(d_zbb:4:1) = '0';
%subst(d_zbb:5:1) = %char(#_rem);

Beide Anweisingen in einem Statement geht so nicht,
aber so würde es gehen:
%subst(d_zbb:4:2) = '0 '+ %char(#_rem);

co_steffl
08-12-09, 09:05
Hallo

O.K Debugger

%subst(d_zbb:1:2) = %char(#_rest) + ':';

D_ZBB = '08: '

#_REM = 00002.

%subst(d_zbb:4:2) = '0 ' + %char(#_rem);

D_ZBB = '08:0 '

...und wo ist die Zwei (2) ??

woki
08-12-09, 09:07
%subst(d_zbb:4:2) = '0' + %char(#_rem);
ohne Leerzeichen hinter der 0.

co_steffl
08-12-09, 09:18
O.K.

war von dir das Leerzeichen :)

Es funktioniert!

Danke

woki
08-12-09, 09:20
aber warum machst du es so kompliziert?
so wie ich verstanden habe, steht in #_rest die Stunden und in #_rem die Minuten. Das soll alles in d_zbb mit dem Format hh:mm geschrieben werden. Deine Lösung klappt für Uhrzeiten mit einstelligen Werten wie 08:02, aber was ist mit beispielsweise 16:12 Uhr?

Hier mein Vorschlag:
definiere zwei zusätzliche 2stellige Alphafelder für die Stunden und Minuten, hier d_zbb_hh und d_zbb_mm und dann:
1. schreibe die Stunden in das Feld d_zbb_hh, setze ggf. Vornullen
evalR d_zbb_hh = %char(#_rest);
d_zbb_hh = %xlate(' ':'0':d_zbb_hh);
2. schreibe die Minuten in das Feld d_zbb_mm, setze ggf. Vornullen
evalR d_zbb_mm = %char(#_rem);
d_zbb_mm = %xlate(' ':'0':d_zbb_mm);
3. schreibe die Stunden in das Feld d_zbb, setze : und schreibe die Minuten
d_zbb = d_zbb_hh + ':' + d_zbb_mm;


oder so ohne zusätzliche Variablen:
evalR d_zbb = %char(#_rem);
evalR %subst(d_zbb:1:3) = %char(#_rest) + ':';
d_zbb = %xlate(' ':'0':d_zbb);

Der Quellcode funktioniert dann nicht nur für die Uhrzeit 08:02, wie dein Quellcode, sondern auch für Stunden und Minuten mit jeweils 2 Stellen.