Re: Lire du XML "particulier"

Posté par xofxon le 5/8/2005 11:19:17
Bonjour,
toujours pour une lecture plus pertinente des rss, il faut "surcharger" la procédure privée "ExtraitDate" de la classe "RSS" avec une nouvelle méthode, procédure "ExtraitDate_Finement"
PROCEDURE PRIVÉE ExtraitDate(sFormat)

	// Convertit les dates chaines en DateHeure W-Langage
	
	dDateHeure est une DateHeure	
	//							Année							Mois												Jour
	dDateHeure..PartieDate = 	ExtraitChaîne(sFormat, 4, " ") + :VersMoisEnChiffre(ExtraitChaîne(sFormat, 3, " ")) + ExtraitChaîne(sFormat, 2, " ") 
	dDateHeure..PartieHeure = 	SansEspace(Remplace(ExtraitChaîne(sFormat, 5, " "), ":", ""))
	
	dDate est une Date = (dDateHeure..PartieDate)
	SI dDate..Jour = 00 ALORS
		dDateHeure..PartieDate = dDate..Année + dDate..Mois + "01"
	FIN
Trace("Sauce PC-Soft : Extraction de la date <"+sFormat+"> qui renvoie <"+dDateHeure+">")
dDateHeure = :ExtraitDate_Finement(sFormat)
Trace("Sauce Moi+Fin : Extraction de la date <"+sFormat+"> qui renvoie <"+dDateHeure+">")
RENVOYER dDateHeure

PROCEDURE ExtraitDate_Finement(vv_chaine_date)

vl_e_i est un entier
vl_e_tmp est un entier
vl_d_date est une chaîne
vl_tc_MOIS est un tableau de 12 chaînes
vl_c_AAAA est une chaîne
vl_c_MM est une chaîne
vl_c_JJ est une chaîne
vl_c_HH est une chaîne
vl_c_MIN est une chaîne
vl_c_SS est une chaîne
vl_e_res est un entier

vl_tc_MOIS[1] = "Jan"
vl_tc_MOIS[2] = "Feb"
vl_tc_MOIS[3] = "Mar"
vl_tc_MOIS[4] = "Apr"
vl_tc_MOIS[5] = "May"
vl_tc_MOIS[6] = "Jun"
vl_tc_MOIS[7] = "Jul"
vl_tc_MOIS[8] = "Aug"
vl_tc_MOIS[9] = "Sep"
vl_tc_MOIS[10] = "Oct"
vl_tc_MOIS[11] = "Nov"
vl_tc_MOIS[12] = "Dec"


vl_e_i = Position(vv_chaine_date,",",0)
TANTQUE vv_chaine_date[[vl_e_i+1]] = " "
	vl_e_i++
FIN
vl_e_i++



SI vv_chaine_date[[vl_e_i+1]] = " " ALORS
	vl_e_res = vv_chaine_date[[vl_e_i]]
	vl_c_JJ = NumériqueVersChaine(vl_e_res,"02d")
SINON
	vl_e_res = vv_chaine_date[[vl_e_i A vl_e_i+1]]
	vl_c_JJ = NumériqueVersChaine(vl_e_res,"02d")
	vl_e_i++
FIN
TANTQUE vv_chaine_date[[vl_e_i+1]] = " "
	vl_e_i++
FIN
vl_e_i++
vl_c_MM = vv_chaine_date[[vl_e_i A vl_e_i+2]]
vl_e_tmp = vl_e_i+2

POUR vl_e_i=1 A 12
	SI Position(vl_tc_MOIS[vl_e_i],vl_c_MM,0,SansCasse) <>0 ALORS
		SORTIR
	FIN
FIN

vl_c_MM = NumériqueVersChaine(vl_e_i,"02d")
vl_e_res = vv_chaine_date[[vl_e_tmp+2 A vl_e_tmp+5]]
vl_c_AAAA = NumériqueVersChaine(vl_e_res,"04d")
vl_e_res = vv_chaine_date[[vl_e_tmp+7 A vl_e_tmp+8]]
vl_c_HH = NumériqueVersChaine(vl_e_res,"02d")
vl_e_res = vv_chaine_date[[vl_e_tmp+10 A vl_e_tmp+11]]
vl_c_MIN =  NumériqueVersChaine(vl_e_res,"02d")
vl_e_res = vv_chaine_date[[vl_e_tmp+13 A vl_e_tmp+14]]
vl_c_SS =  NumériqueVersChaine(vl_e_res,"02d")

vl_d_date = vl_c_AAAA+vl_c_MM+vl_c_JJ+vl_c_HH+vl_c_MIN+vl_c_SS
RENVOYER vl_d_date


Ainsi une la chaine "Thu, 4 Aug 2005 14:48:38 +0200" interprêtée exotiquement par l'actuelle procédure renverra une date heure plus "normale"

Sauce PC-Soft : Extraction de la date qui renvoie <20050804220000000>
Sauce Moi+Fin : Extraction de la date qui renvoie <20050804220000000>

Sauce PC-Soft : Extraction de la date qui renvoie <00000000200500000>
Sauce Moi+Fin : Extraction de la date qui renvoie <20050804144838000>

Reste encore à traiter un éventuel ajustement de l'heure entre paramètres locaux et GMT.

--
Cordialement
Christophe Charron

Cette contribution était de : http://old.wdforge.org/newbb/viewtopic.php?forum=6&topic_id=2584&post_id=10967