[R] Soustraire un mois au mois en cours avec @MON

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Hugues
Niveau 8
Niveau 8
Messages : 597
Enregistré le : ven. 21 sept. 2012 18:12
Status : Hors ligne

[R] Soustraire un mois au mois en cours avec @MON

#1

Message par Hugues »

Bonjour à tous,

Question très bête, mais la fonction @MON me donne le mois en cours, par exemple nous sommes au mois de mars, elle me renvoie 03... Normal :D
Mais si je veux soustraire un mois... je fais comme comme la plus part des boulets de mon genre "@MON -1" qui me renvoie "2" au lieu des "02" espéré...

Donc ma question, y a t'il une fonction qui permet de soustraire 1 mois au mois en cours... pour obtenir "02" directement?

Merci par avance...
Modifié en dernier par Hugues le lun. 04 mars 2013 15:27, modifié 1 fois.
Avatar du membre
jguinch
Modérateur
Modérateur
Messages : 2515
Enregistré le : lun. 14 févr. 2011 22:12
Status : Hors ligne

Re: [..] Soustraire un mois au mois en cours avec @MON

#2

Message par jguinch »

Salut
Regarde la doc de la fonction _DayValueToDate, il y a un exemple qui te conviendra certainement.
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
Hugues
Niveau 8
Niveau 8
Messages : 597
Enregistré le : ven. 21 sept. 2012 18:12
Status : Hors ligne

Re: [..] Soustraire un mois au mois en cours avec @MON

#3

Message par Hugues »

Merci, mais c'est pas exactement ce que je veux. Ce qui m'intéresse c'est uniquement le mois.

Je veux uniquement le mois en cours -1.
Avatar du membre
jguinch
Modérateur
Modérateur
Messages : 2515
Enregistré le : lun. 14 févr. 2011 22:12
Status : Hors ligne

Re: [..] Soustraire un mois au mois en cours avec @MON

#4

Message par jguinch »

Code : Tout sélectionner

#include <Date.au3>
Local $sNewDate = _DateAdd('M', -1, _NowCalcDate())
$mon = StringRegExpReplace($sNewDate, "\d{4}/(\d{2})/\d{2}", "$1") )
MsgBox(0, "", "Mois précédent : " & $mon )
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
Hugues
Niveau 8
Niveau 8
Messages : 597
Enregistré le : ven. 21 sept. 2012 18:12
Status : Hors ligne

Re: [..] Soustraire un mois au mois en cours avec @MON

#5

Message par Hugues »

Yes, tout à fait ça.

Merci beaucoup.

Sujet résolu.
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [R] Soustraire un mois au mois en cours avec @MON

#6

Message par mikell »

Rubrique comment faire simple quand on peut faire compliqué :mrgreen:

Code : Tout sélectionner

$moisprec = @MON - 1
If $moisprec = 0 Then $moisprec = 12
Msgbox(0,"", StringFormat("%02i", $moisprec))
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
jguinch
Modérateur
Modérateur
Messages : 2515
Enregistré le : lun. 14 févr. 2011 22:12
Status : Hors ligne

Re: [R] Soustraire un mois au mois en cours avec @MON

#7

Message par jguinch »

Salut Mickel !! Impec ton script, j'y avais pensé, mais si tu veux enlever 2, 3 ou 4 mois ? :P C'est à peine plus chiant...
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [R] Soustraire un mois au mois en cours avec @MON

#8

Message par mikell »

Code : Tout sélectionner

$a = 3   ; mais si tu veux enlever 2, 3 ou 4 mois.. etc

Msgbox(0,"", StringFormat("%02i", Execute(@MON<=$a)*(12+@MON-$a) + Execute(@MON>$a)*(@MON-$a)) )
:P
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11830
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [R] Soustraire un mois au mois en cours avec @MON

#9

Message par Tlem »

Joli exercice de style. Malheureusement perfectible si on sort du cadre des valeurs (voir capture ci-jointe) ...

Je préfère rester traditionaliste même si le code ne tient pas sur une ligne, mais au moins il fonctionne dans tous les cas. :mrgreen:
► Afficher le texte
Fichiers joints
CalcDate.PNG
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [R] Soustraire un mois au mois en cours avec @MON

#10

Message par mikell »

Thierry, tu manques parfois d'humour :roll:
Il se peut ... qu'après de nombreux jours de réflexion et une révision approfondie des bases d'autoit mes quelques neurones survivants soient arrivés à accoucher péniblement de l'équivalent de ton code Image
Le vrai challenge restant (exclusivement pour le fun, bien sûr) d'essayer de répondre au cahier des charges avec 1 seule ligne de code :wink:

Code : Tout sélectionner

$a = 15 

Msgbox(0,"", StringFormat("%02i", Execute(@MON<=Mod($a,12))*(12+@MON-Mod($a,12)) + Execute(@MON>Mod($a,12))*(@MON-Mod($a,12))) )
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
jguinch
Modérateur
Modérateur
Messages : 2515
Enregistré le : lun. 14 févr. 2011 22:12
Status : Hors ligne

Re: [R] Soustraire un mois au mois en cours avec @MON

#11

Message par jguinch »

Rubrique comment faire simple quand on peut faire compliqué
Bravo !! :wink:
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [R] Soustraire un mois au mois en cours avec @MON

#12

Message par mikell »

Bah oui, la simplicité c'est très relatif :mrgreen:
Mais !
Reste que ce code n'utilise sur 1 ligne que @MON et des fonctions basiques d'autoit, et pas d'include :P
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11830
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [R] Soustraire un mois au mois en cours avec @MON

#13

Message par Tlem »

Tout comme jguinchard, je dit bravo. Mais en dehors de l'exercice de style, cela n'apporte absolument rien, si ce n'est un code incompréhensible après plusieurs semaines d'oublis ...

De plus si on veut faire des comparaisons, donnons nous à cœur joie :
► Afficher le texte
Au delà du fait que le code original de jguinchard rajoute un include conséquent, il permet tout de même une compréhension bien plus aisée et tel que je l'ai écrit, l'addition ou la soustraction d'un nombre de mois à la date en cours simplement en mettant la variable $a en positif ou en négatif. :P
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2284
Enregistré le : lun. 30 mars 2009 22:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

Re: [R] Soustraire un mois au mois en cours avec @MON

#14

Message par jchd »

Je m'immisce furtivement dans ce fil pour rappeler que les macros de date et heure peuvent être à l'origine d'erreurs particulièrement sournoises quand elles ne sont pas utilisées individuellement et en une seule fois.

Voir http://www.autoitscript.fr/forum/viewtopic.php?f=21&t=9084
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11830
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [R] Soustraire un mois au mois en cours avec @MON

#15

Message par Tlem »

Bien vu Jean-Cristophe.
J'ai corrigé les codes ci-dessus pour prendre en compte ta remarque.
Par contre, bien que la différence de temps ne sera sans doute pas significative, la durée d'exécution des codes ne sera mise à jour que plus tard. ;)
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2284
Enregistré le : lun. 30 mars 2009 22:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

Re: [R] Soustraire un mois au mois en cours avec @MON

#16

Message par jchd »

Il est bien vrai que dans la plupart des applications, ces macros ne sont utilisées que parcimonieusement. Dans le cas présent, la probabilité pour que @MON change entre deux utilisations dans une poignée de lignes de code sans boucle est extrêmement faible.

Par contre si l'utilisation est routinière (ex. : un log qui emploie ces macros ou une appli qui les utilise pour gérer des intervalles de temps), on peut se trouver dans un cas tortueux. Comme il est généralement impossible de prévoir si le code risque de tomber dans ce piège, mieux vaut s'en méfier a priori plutôt que s'arracher les quenouilles a posteriori.

Du coup, si le timbre à date est décalé et pris dans le temps quelques µs plus tard à cause de la complexité additionnelle ce n'est pas bien grave, même si on emploie @MSEC.
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [R] Soustraire un mois au mois en cours avec @MON

#17

Message par mikell »

C'est clair qu'il faut comparer ce qui est comparable, exécuter 4 fois la même fonction Mod($a,12) et 2 Execute dans la même ligne est une hérésie en matière de performance :roll:
Mais les exercices de style peuvent être utiles
Par exemple faire ça sur 1 seule ligne nécessite une privauté, l'assimilation du booléen Execute(condition) à sa valeur numérique, mais le concept peut être intéressant pour s'affranchir d'un If...Then
Et Mod est quand même plus sexy que la boucle While
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Répondre