0 votes

AppleScript : séparer un nombre d'un texte dans une variable

J'ai un script qui calcule le délai entre deux dates et renvoie le résultat en jours, mois ou années.

Par exemple, étant donné myResult = "6 jours" Comment séparer le numéro du texte ?

J'ai réussi à obtenir le numéro uniquement en utilisant ce :

set myResultNumberOnly to number of myResult

mais je n'arrive pas à faire la même chose à partir du texte :

set myResultTextOnly to text of myResult

J'ai également essayé

set myResultTextOnly to word of myResult

Je peux peut-être opter pour la délimitation du texte ? Je ne peux pas déterminer la longueur du nombre en utilisant ce :

set theLength to (get length of (myResultTextNumberOnly as text))

Ou dois-je utiliser l'instruction if ?

Quelle serait la meilleure façon de procéder ?

MISE À JOUR

Je viens de réaliser que set myResultNumberOnly to number of MyResult donner un mauvais numéro, je ne comprends pas vraiment pourquoi ?

set MyResult to "Account Value:$478.01"
set myResultNumberOnly to number of MyResult

Résultat : 21

1voto

OnePablo Points 1

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 ]

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X