View Full Version : String Verarbeitung Free Format
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
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);
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
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?
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);
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);
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) ??
%subst(d_zbb:4:2) = '0' + %char(#_rem);
ohne Leerzeichen hinter der 0.
O.K.
war von dir das Leerzeichen :)
Es funktioniert!
Danke
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.