number of MyResult
permet d'obtenir la longueur d'une chaîne de caractères. "6 days"
a une longueur de 6 caractères, alors que "Account Value:$478.01"
comporte 21 caractères.
La méthode la plus simple pour extraire des nombres d'une chaîne consisterait à diviser la chaîne en mots, puis à tester chaque élément de la liste individuellement pour voir s'il peut être transformé en nombre :
set MyResult to "Account Value:$478.01"
set MyResultWords to words of MyResult
repeat with w in MyResultWords
set w's contents to coerceToNumber(w's contents)
end repeat
set MyResultNumbers to every number in MyResultWords
to coerceToNumber(x)
local x
try
x as number
on error
x
end try
end coerceToNumber
Cela ne permet pas de gérer les représentations sous forme de chaînes de caractères des nombres en notation scientifique, par exemple 1.234E+09
car la méthode utilisée par AppleScript pour délimiter ses mots se traduit par {"1.234E", "+", "09"}
. Dans ce cas, vous pouvez définir text item delimiters
a space
et effectuer la même opération sur le text items of My Result
.
J'ai un script qui calcule le délai entre deux dates et renvoie le résultat en jours, mois ou années.
Je me demande toutefois pourquoi votre script produit un résultat qui est une chaîne de valeur de "6 jours". Cela me fait penser que le script que vous utilisez pour calculer les intervalles de temps entre les dates ne le fait pas d'une manière aussi agréable qu'il le pourrait. Cela dépend en partie de l'entrée que reçoit votre script, mais dans de nombreux cas, vous devriez envisager de convertir l'entrée en objets date AppleScript, ce qui vous permet alors de calculer facilement les différences et vous renvoie un nombre réel que vous pouvez manipuler pour obtenir une mesure en jours, minutes, heures, etc.
L'exemple script ci-dessous prend pour entrée une chaîne de date au format ISO 8601, c'est-à-dire "yyyy-mm-dd"
Bien que vous puissiez adapter le script à d'autres formats d'entrée :
# The units parameter is optional, and defaults to measurements in seconds.
# To choose a different unit, pass one of the constants 'hours', 'days',
# 'minutes', or 'weeks' (without quotes).
on timeInterval from startDate to endDate by units : 1
tell (current date) to set [startDate, ¬
day, [year, its month, day]] to ¬
[it, 1, words of startDate]
tell (current date) to set [endDate, ¬
day, [year, its month, day]] to ¬
[it, 1, words of endDate]
(endDate - startDate) / units
end timeInterval
timeInterval from "2012-06-03" to "2019-04-01" by days --> 2493.0
timeInterval from "2012-06-03" to "2019-04-01" by weeks --> 356.142857142857
timeInterval from "2019-03-31" to "2019-04-01" by hours --> 24.0
timeInterval from "2019-03-31" to "2019-04-01" by minutes --> 1440.0
timeInterval from "2019-03-31" to "2019-04-01" --> 8.6E+4 [ = 86400 ]