Variables d’appel dans le code d’un indicateur

Viewing 14 posts - 16 through 29 (of 29 total)
  • Author
    Posts
  • #249889 quote
    umrk
    Participant
    New

    note au modérateur : désolé, je pensais faciliter la tâche de mes correspondants, dont certains étaient Britanniques, en leur répondant en français. Je comprends votre commentaire, et j’en tiendrai compte à l’avenir.

    #249892 quote
    umrk
    Participant
    New

    note au modérateur : désolé, je pensais faciliter la tâche de mes correspondants, dont certains étaient Britanniques, en leur répondant dans leur langue. Je comprends votre commentaire, et j’en tiendrai compte à l’avenir.

    #249893 quote
    umrk
    Participant
    New

    Bon, je remercie tous ceux qui ont pris la peine de me répondre, mon problème est maintenant résolu, même si ce n’est pas de la façon que j’imaginais. Mon besoin étant de calculer un temps écoulé (en jours calendaires ou en jours de bourse) depuis un évènement dont la date m’est connue, j’avais imaginé de passer en argument CurrentDay= Days. Cela ne marche pas,  mais par contre CurrentDay= Date marche. Toutefois faire la différence entre deux dates en format YYYMMDD ne donne pas un nombre de jours. Sur une idée de kingmordecal, j’ai donc créée l’indicateur PSEUDODAYS, qui me permet de faire une soustraction me donnant un résultat qui, s’il introduit de petites bizarreries dans le décompte à cause des années bissextiles, ou des mois dont le nb de jours n’est pas égal à 30, répond quand même à mon besoin.  Bon, pour les puristes, c’est un peu crade comme solution, mais je vais m’en contenter….

    (je fais une parenthèse : j’ai développé une application (en LibreOffice , puis en Excel) de thermique qui calcule la température sur une année dans ma maison (mon grenier, ma cave, mon séjour, les tuiles de mon toit, etc …) en intégrant l’équation de Fourier à l’intérieur de mes murs (pas de deux minutes .. ) en tenant compte de l’effet du rayonnement solaire sur mes tuiles, etc .. en utilisant d’une température extérieure reconstituée par morceaux de sinusoïdes à partir des Min et des Max journaliers sur une année. C’est une plaisanterie qui m’a demandé des milliers d’heures de travail. Et bien le plus dur dans tout ça, ce n’a pas été les problèmes de thermique (pourtant difficiles), mais la gestion des années bissextiles sur des durées d’exécution à cheval sur deux années ! (ainsi que le fait de slalomer entre les bugs d’Excel dans les dates) !!!!

    Indicateur PSEUDODAYS (variable d’appel TheDate)

    TheYear = Floor(TheDate / 10000, 0)
    TempDay = Floor(TheDate / 100, 0)
    TheDay = ((TheDate / 100) – TempDay) * 100

    TempMonth = Floor(TheDate / 100, 0) * 100
    TempMonth2 = TempMonth / 10000
    TheMonth = (TempMonth2 – Floor(TempMonth / 10000, 0)) * 100

    PseudoDays= (TheYear-1900)*365+TheMonth*30+TheDAY

    Return PseudoDays

    #249921 quote
    JS
    Participant
    Senior

    Bonjour,
    Ce code est moins sujet aux erreurs d’arrondi…

    TheYear  = Floor(TheDate / 10000)
    TheMonth = Floor(TheDate / 100) MOD 100
    TheDay   = TheDate MOD 100
    
    PseudoDays = (TheYear - 1900) * 365 + TheMonth * 30 + TheDay
    
    RETURN PseudoDays
    
    umrk thanked this post
    #249923 quote
    umrk
    Participant
    New

    Merci beaucoup !

    JS and GraHal thanked this post
    #249926 quote
    robertogozzi
    Moderator
    Master

    DAYS restitue le nombre de jours écoulés depuis le 1/1/1970 (en mode similaire à Unix) à la barre indiquée entre le carré des parents.
    Si cette barre est indiquée, vous devez vous assurer du courant par défaut.

    Je ne sais pas à quoi servent vos codes, mais juste pour tester le fonctionnement de CALL, les codes que j’ai postés fonctionnent.

    umrk thanked this post
    #249961 quote
    umrk
    Participant
    New

    Bon, grâce à JS, je peux même propose une version de PSEUDODAYS qui devrait donner le résultat exact (sauf que mon code plante (“calculation error”), et je ne sais pas pourquoi !)

     

    $JOURS[1]=0
    $JOURS[2]=31
    $JOURS[3]=59
    $JOURS[4]=90
    $JOURS[5]=120
    $JOURS[6]=151
    $JOURS[7]=181
    $JOURS[8]=212
    $JOURS[9]=243
    $JOURS[10]=273
    $JOURS[11]=304
    $JOURS[12]=334
    $JOURS[13]=365

    TheYear = Floor(TheDate / 10000)
    TheMonth = Floor(TheDate / 100) MOD 100
    TheDay = TheDate MOD 100

     

    DaysOfPreviousMonths=$JOURS[TheMonth]

    CorrectBissext=FLOOR((TheYear-1900)/4)

     

    NewPseudoDays = (TheYear – 1900) * 365+CorrectBissext + DaysOfPreviousMonths + TheDay

    RETURN NewPseudoDays

    #249963 quote
    umrk
    Participant
    New

    (Il reste à corriger une erreur résiduelle si , das une année bissextile en cours, on est au delà du 28 Février …)

    #249964 quote
    JS
    Participant
    Senior

    Salut,

    Ce qui est frappant, c’est que « $Days[ ] » et « $Jours[ ] » sont utilisés de manière interchangeable…

    Le code est adapté au format de date : YYYYMMDD (et non DDMMYYYY)

    Je pense que le code fonctionne bien…

    umrk thanked this post
    #249965 quote
    JS
    Participant
    Senior

    Oubliez le point 1, c’était à cause de la traduction…

    umrk thanked this post
    #249966 quote
    JS
    Participant
    Senior

    Le code fonctionne bien jusqu’en 2099 car les années du siècle (2100, 2200, 2300,…) ne sont pas des années bissextiles et avec « Floor((TheYear-1900)/4) » après 2100 vous comptez 1 jour de trop…

    umrk thanked this post
    #249969 quote
    umrk
    Participant
    New
    Avec ça, le résultat devrait être correct .. (NB : 1) je teste CurrentYearFeb29Issue par rapport à 1, le logiciel a refusé de faire le test par rapport à True. Pourquoi ? 2) mon code plante toujours .. des idées ?)   JOURS[1]=0 $JOURS[2]=31 $JOURS[3]=59 $JOURS[4]=90 $JOURS[5]=120 $JOURS[6]=151 $JOURS[7]=181 $JOURS[8]=212 $JOURS[9]=243 $JOURS[10]=273 $JOURS[11]=304 $JOURS[12]=334 $JOURS[13]=365 TheYear = Floor(TheDate / 10000) TheMonth = Floor(TheDate / 100) MOD 100 TheDay = TheDate MOD 100 CurrentYearFeb29Issue=(TheYear MOD 4) =0 AND (TheYear MOD 100) <>0 IF (CurrentYearFeb29Issue = 1) AND (TheMonth>2) THEN Feb29Issue=1 Else Feb29Issue=0 ENDIF DaysOfPreviousMonths=$JOURS[TheMonth]+Feb29Issue CorrectBissext=FLOOR((TheYear-1901)/4)-FLOOR((TheYear-1901)/100)   NewPseudoDays = (TheYear – 1901) * 365+CorrectBissext + DaysOfPreviousMonths + TheDay RETURN NewPseudoDays
    #249980 quote
    JS
    Participant
    Senior
    Salut, Je pense que le code est correct maintenant… Attention aux traductions de l’anglais vers le français car ce n’est pas toujours cohérent… J’ai joint le « itf-file » que vous pouvez importer dans les indicateurs de PRT…
    TheDate=20250822
    
    If BarIndex=0 then
    $Days[1]=0
    $Days[2]=31
    $Days[3]=59
    $Days[4]=90
    $Days[5]=120
    $Days[6]=151
    $Days[7]=181
    $Days[8]=212
    $Days[9]=243
    $Days[10]=273
    $Days[11]=304
    $Days[12]=334
    EndIf
    
    TheYear=Floor(TheDate/10000)
    TheMonth=Floor(TheDate/100) MOD 100
    TheDay=TheDate MOD 100
    
    CurrentYearFeb29Issue=(TheYear MOD 4)=0 and (TheYear MOD 100)<>0 or (TheYear MOD 400)=0
    
    If CurrentYearFeb29Issue and TheMonth>2 then
    Feb29Issue=1
    Else
    Feb29Issue=0
    EndIf
    
    DaysOfPreviousMonths=$Days[TheMonth]+Feb29Issue
    
    CorrectBissext=Floor((TheYear-1901)/4)-Floor((TheYear-1901)/100)+Floor((TheYear-1601)/400)
    
    NewPseudoDays = (TheYear-1901)*365+CorrectBissext+DaysOfPreviousMonths+TheDay
    
    RETURN NewPseudoDays
    New-Pseudo-Days.itf
    #249982 quote
    umrk
    Participant
    New
    Merci ! Bon cette fois on peut fermer ce fil, problème résolu !
    JS thanked this post
Viewing 14 posts - 16 through 29 (of 29 total)
  • You must be logged in to reply to this topic.

Variables d’appel dans le code d’un indicateur


ProBuilder : Indicateurs & Outils Personnalisés

New Reply
Author
author-avatar
umrk @umrk Participant
Summary

This topic contains 28 replies,
has 4 voices, and was last updated by umrk
6 months, 1 week ago.

Topic Details
Forum: ProBuilder : Indicateurs & Outils Personnalisés
Language: French
Started: 08/17/2025
Status: Active
Attachments: 3 files
Logo Logo
Loading...