Anmelden

View Full Version : Datum-Konvertierung free rpg



loeweadolf
18-11-05, 17:06
Ich habe ein 10-stelliges alphanumerisch Feld, welches ein Datum beinhaltet, z.B.: '2005-11-18' .

ich würde dieses Feld gerne in ein Datum-Feld konvertieren
*ISO.

Vorher sollte ich es wohl auf Plausibilität prüfen.

und das alles im free rpg.

wie gehe ich da vor ?

mfg. Ludger

bateau
18-11-05, 17:54
Moin!

Erst mal prüfst Du den Inhalt mit

test(de) *iso meincharfeld;
if %error;
xxx
endif;

Dabei ist vorausgesetzt, dass Du das Datumsformat kennst. Falls nicht wirds halt ein bissle schwieriger.

Dann konvertierst Du den Inhalt mit

meindatumsfeld = %date(meincharfeld:*ISO);

Hoffe, ich hab das jetzt nach 6 grossen Feierabendbier noch ordentlich und richtig beschrieben ;-)

Grüsse

Martin

loeweadolf
18-11-05, 18:13
Hallo Martin,

auch die 6 Bier können Dir anscheinend nichts anhaben.

Die Lösung funktioniert.

Vielen Dank. Ludger

B.Hauser
20-11-05, 15:06
Hallo,

man könnte auch auf die ganze Testerei mit TEST(DE) verzichten, und einen Fehler über eine Monitor Group abfangen.



/Free
Monitor;
MyDateField = %Date(MyCharField: *ISO);
On-Error;
// Konvertierungs-Fehler
EndMon;


Man sogar die einzelnen Error-Codes gezielt abfangen:
112: Datums-, Zeit- oder Zeitmarkenwert ist ungültig.
113: Eine Berechnung mit Datums-, Zeit- oder Zeitmarkendaten hatte einen Über- oder Unterlauf zur Folge
114: Die Jahresangabe eines Datums- oder Zeitmarkenwerts liegt nicht innerhalb des korrekten Bereichs.

Birgitta

Mr.iSeries
13-03-08, 14:57
Habe auch hier ein Problem:

$prodateur = %date($prodat:*EUR);

wenn ich jetzt den 30.02.2008 eingebe ist das ja ein Fehler den ich mit *PSSR abfange.

BegSr *pssr;
// ¯¯¯¯¯¯¯
if %status = 112;
$prodateur = *loval;
ERR_Datum = *on;
write bild01;
leavesr;
endif;
EndSr;

Er geht auch in diese Subroutine hinein...
Will dann eine Fehlernachricht schreiben und mit LeaveSR zum Exfmt zurück...
Sobald er aber die Subroutine verlässt kommt wieder die Fehlermeldung.
Was mache ich falsch?

Vielen Dank für Eure Hilfe...

B.Hauser
13-03-08, 16:03
Hallo,

das ist jetzt nicht die Antwort auf Deine Frage, aber ...

Warum machst Du es nicht so:



/Free
Monitor;
$prodateur = %date($prodat:*EUR);
On-Error;
$prodateur = *loval;
ERR_Datum = *on;
write bild01;
//Und was Du sonst noch im Fehlerfall machen willst
EndMon;
/End-Free


Birgitta

Mr.iSeries
14-03-08, 06:21
Hallo,

das ist jetzt nicht die Antwort auf Deine Frage, aber ...

Warum machst Du es nicht so:



/Free
Monitor;
$prodateur = %date($prodat:*EUR);
On-Error;
$prodateur = *loval;
ERR_Datum = *on;
write bild01;
//Und was Du sonst noch im Fehlerfall machen willst
EndMon;
/End-Free


Birgitta


Vielen Dank, hat geklappt!