Chronomètre en AppleScript

ceslinstinct

Membre expert
Club iGen
10 Août 2004
2 070
111
24
Bonjour

Je cherche a me créer un chronomètre en AppleScript.
time of (current date) ne donne qu'un temps en secondes.

Mes recherche me donnent en shell script: trouvé %F pour des milli-secondes et %N pour des nano-secondes. Le défaut ça marche pas chez moi j'ai pas compris comment les utiliser.
Si vous pouvez m'expliquer pourquoi.

Donc j'utilise la commande tick qui est le soixantième de secondes.

Je voudrais savoir si mon script me donne de bon résultat.

Le script

-- Chronomètre au millième de seconde
-- Un tick = 0.016666666667 seconde
-- le script arrondi à 0.017 donc donne une idée de temps
-- Le nombre de ticks commence a partir du démarrage de l'ordinateur
-- Sur un portable comme moi la fermeture de l'écran coupe le compteur de ticks.

property temps_Debut : ""

calcul()

on calcul()
if temps_Debut is "" then
set temps_Debut to the ticks of (current date)
else
set temps_Fin to the ticks of (current date)
set temps_Millemes to ((temps_Fin - temps_Debut) / 60) * 1000
set heures_ to (text -2 thru -1 of ("00" & (temps_Millemes div 3600000)) & ":")
set minutes_ to (text -2 thru -1 of ("00" & ((temps_Millemes mod 3600000) div 60000)) & ":")
set secondes_ to (text -2 thru -1 of ("00" & (((temps_Millemes mod 3600000) mod 60000) div 1000)) & ".")
set milliemes_S to (((temps_Millemes mod 3600000) mod 60000) mod 1000) as integer
if milliemes_S ? 99 then set milliemes_S to (text -3 thru -1 of ("00" & milliemes_S))
display dialog "Temps passé: " & heures_ & minutes_ & secondes_ & milliemes_S buttons {"Ok"} default button 1
set temps_Debut to ""
end if
end calcul

@+
 
Bonjour

La ligne ci-dessous a une erreur car l'enregistrement sur ce site n'a pas l'air d'aimer le signe "plus petit ou égal" '<=' (qui se trouve sous la forme d'un seul caractère) et le remplace par un point d'intérogation dans le script du post ci-dessus.

if milliemes_S ? 99 then set milliemes_S to (text -3 thru -1 of ("00" & milliemes_S))

@+
 
Didier Guillion a dit:
Tout ceci me semble bien confu. Poste quelque part ton script, et fourni l'adresse, on pourra l'essayer...

Cordialement

Bonsoir

C'est un script en phase de test donc sans fenêtre d'affichage juste un display dialog en fin pour afficher le résultat.
Le script du premier post, un copier coller dans l'Éditeur de script et 2 clics sur le bouton exécuter espacés affiche le résultat (ne pas oublier de modifier le ?)

L'explication de mes calculs (je pense que c'est le plus difficile à comprendre):

set temps1 to time of (current date)
delay 5.5
set temps2 to time of (current date)
set x to temps2 - temps1
display dialog x
Te donne 6 donc un temps arrondi a la seconde, je cherche le temps avec les millièmes.

Un tick est 1/60 ème de seconde donc 60 ticks par secondes.

Alors

set temps1 to the ticks of (current date)
delay 5.5
set temps2 to the ticks of (current date)

set x to temps2 - temps1 -- = 330 ticks
set y to x / 60 -- = 5.5 Secondes
set z to y * 1000 -- 5500 millième de secondes

set a to z div 1000 -- = 5 secondes
set b to z mod 1000 as integer -- 500 millièmes de seconde (integer pour éviter les chiffres suivant)
display dialog a & " " & b as string -- donne 5 secondes et 500 millièmes

3600000 (nombre de millièmes de seconde dans 1 heure)
60000 (nombre de millièmes de seconde dans 1 minute)
div 60000 ou 1000 (donne seulement le nombre de minutes, de secondes ou de millièmes avant la virgule)
mod 3600000 ou 60000 (donne seulement le nombre après la virgule)

(text -2 thru -1 of ("00" & (place un zéro si 1 seul nombre pour les heures, les minutes et les secondes) 2 chiffres affichés
(text -3 thru -1 of ("00" & (place un zéro ou 2 si les millièmes sont avec 1 ou 2 chiffres) 3 chiffres affichés

Je refait certain calculs plusieurs fois, ça évite les arrondies et en plus je gagne en nombre de lignes de script (donc risque de bugs en moins).

Je n'ai pas de site internet car je suis rarement sur le web (fin de semaine sans web).

Si tu veut le script détaillé je te l'envoie par MP suivant ta réponse.
J'ai cherché en do shell script, mais rien trouvé pour les milli-secondes de concret.

Merci pour ta réponse.

PS: J'ai cherché et rien trouvé concernant ces calculs, ça existe mais sans lecture du script, si ça peut aider j'en serais content.

Salutations

@+
 
ceslinstinct a dit:
Bonsoir

C'est un script en phase de test donc sans fenêtre d'affichage juste un display dialog en fin pour afficher le résultat.
Le script du premier post, un copier coller dans l'Éditeur de script et 2 clics sur le bouton exécuter espacés affiche le résultat (ne pas oublier de modifier le ?)

@+


Ce faisant j'obtient une erreur en deuxieme ligne, "ticks" n'est pas une propriété de "Date"

set temps_Debut to the ticks of (current date)

Cordialement
 
Bonjour :)
Didier Guillion a dit:
... "ticks" n'est pas une propriété de "Date"
En effet, "the ticks" est une commande issue de l'Osax "Jon's Commands" qui ne nécessite aucun argument normalement.

Sinon, pour faire des calculs très fins, en millisécondes, il y a une Osax, compatible Os9 et X, qui peut éventuellemnet rendre service : GetMilliSec...

;)
 
Bonjour

Cette OSAX je l'ai toujours eu dans mes systèmes (8.6, 9, et les divers X) que pour moi elle fait partie de l'éditeur de script.

Merci Fredo de l'avoir signalé.
Son chemin: disque de démarrage/Utilisateur/la Maison/Bibliothèque/ScriptingAdditions/Jon's Commands.osax

Si ce dossier n'existe pas le créer pour placer l'osax.

Testé sous Panther et Tiger sans problème.

Je vais testé GetMilliSec quand la page cité me dira plus Erreur.

Merci Didier Guillion et Fredo pour vos remarque qui sont très constructives, cela va me permettre de contrôler avant de poster.

@+
 
Salut :)
ceslinstinct a dit:
Cette OSAX je l'ai toujours eu dans mes systèmes (8.6, 9, et les divers X) que pour moi elle fait partie de l'éditeur de script.
Attention, bien que cette Osax existe, il est vrai, depuis des nombreuses années (c'est un incontournable d'AS), la version pour OsX reste une version de développement, car elle n'est jamais arrivé à une version définitive, et comme visiblement son auteur a arrêté son développement, il y a fort à parier qu'elle reste en l'état encore longtemps... à moins que quelqu'un reprenne un jour son développement.

Pour ma part, je n'ai encore jamais eu de soucis avec elle, mais il n'est pas à exclure qu'elle puisse manifester certains dysfonctionnements pour des commandes spécifiques sous certaines conditions d'utilisation... à surveiller donc.

De plus, même si tu considères que cette Osax fait partie de l'Éditeur de Scripts, dans les fait, ce n'est pas vraiment le cas, et si tu l'utilises dans un de tes projets, n'oublie pas que tu devras fournir l'Osax si tu souhaites diffuser tes projets à d'autres... de la même manière que pour toute autre Osax d'ailleurs (dans la limite des licences d'utilisation bien-sûr)... :)

Voilô ;)
 
Le calcul est bon.

Voici comment vérifier:
(au passage, j'ai un peu "allégé" le code)

Bloc de code:
set startTicks to the ticks

-- on simule un une action
set stopTicks to startTicks + 75
repeat until (the ticks) = stopTicks
	-- la boucle est vide pour ne pas parasiter le comptage des ticks
end repeat

-- on calcule le temps écoulé
set endTicks to the ticks
set elapsTicks to endTicks - startTicks

-- on sépare le résultat 
set {b1, b2, b3, b4} to {elapsTicks div 86400, elapsTicks div 3600, elapsTicks div 60, round ((elapsTicks mod 60) / 60) * 1000}

--on mets en forme
set c1 to (text -2 thru -1 of ("00" & b1) & ":" & text -2 thru -1 of ("00" & b2) & ":" & text -2 thru -1 of ("00" & b3) & ":" & text -3 thru -1 of ("00" & b4))

-- on affiche
display dialog "Temps passé: " & c1

;)
 
  • J’aime
Réactions: FredoMkb
zeRafioScripter a dit:
Le calcul est bon.

Voici comment vérifier:
(au passage, j'ai un peu "allégé" le code) ;)

Bonjour

De retour sur le web.

Bien content que mes calculs soit bon, j'avais trouvé des explications mais aucun exemple de fonctionnement.

Ton script est pas très clair pour un novice, mais je l'ai bien compris.
Plus court ca doit pas exister.

Il va me permettre de m'amèliorrer car le formattage du temps en une seule ligne, je connaissais pas.

Merci de ta réponse et de ton script.

@+