Les dates avec la free-form syntaxe

15-12-2006 à 13:47:27
Bonjour,

Comment fait-on un ancien MOVE DateIso (Date en format *ISO) dans DateNum (Zone numérique 8,0) en free language ?

Suis-je vouée à faire des concaténations de %SubSt(%Char(DateIso):1:4) ou d'un truc de ce type ? C'est quand même lourd.

--Message édité par le 14-12-06 à 16:31:10--
  • Liens sponsorisés



14-12-2006 à 18:18:14
Bonjour,

effectivement je ferais aussi un truc dans le genre
D Ds
D Date 8s 0 Inz
D Annee 4s 0 Overlay(Date:1)
D Mois 2s 0 Overlay(Date:*Next)
D Jour 2s 0 Overlay(Date:*Next)

Annee = %Int(%SubSt(%Char(DateIso):1:4));
Mois = %Int(%SubSt(%Char(DateIso):6:2));
Jour = %Int(%SubSt(%Char(DateIso):9:2));


Mais je suis également preneur d'une solution plus simple (même si celle si me parait encore raisonnable)

Wilfrid
14-12-2006 à 21:12:02
Bonjour,
Une autre possibilité

C EVAL W_N8 = (%subdt(DATISO :*y) * 10000) +
C (%subdt(DATISO :*m) * 100) +
C (%subdt(DATISO :*d) )
15-12-2006 à 13:47:27
Plus simple encore et en une seule instruction combinée avec les fonctions intégrées au RPG IV.

d dateiso s d inz(d'2006-12-15')
d datenum s 8 0

/free

datenum = %dec( %char( dateiso : *iso0 ) : 8 : 0 );
dsply datenum; // datenum contient alors 20061215
// en décimal condensé ( "packé" )

Notez que la variable datenum peut très bien étre déclarée en décimal étendu, mais il vaut mieux si possible la déclarer en packé pour que le compilateur n'ait pas à faire un unpack de la variable.
  • Liens sponsorisés