number of MyResult
obtiene la longitud de una cadena. "6 days"
sólo tiene 6 caracteres, mientras que "Account Value:$478.01"
tiene 21 caracteres.
El método más sencillo para extraer números de una cadena sería dividir la cadena en palabras y, a continuación, probar cada elemento de la lista individualmente para ver si se puede convertir en un número:
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
Esto no manejará las representaciones de cadenas de números en notación científica, por ejemplo 1.234E+09
ya que el método que utiliza AppleScript para delimitar sus palabras da como resultado {"1.234E", "+", "09"}
. En este caso, puede establecer text item delimiters
a space
y realizar la misma operación en el text items of My Result
.
Tengo un script que calcula el plazo entre la fecha y devuelve el resultado en días o meses o años.
Sin embargo, me pregunto por qué tu script está produciendo un resultado que es un valor de cadena de "6 días". Me hace creer que el script que estás usando para calcular los intervalos de tiempo entre fechas no lo está haciendo de la manera más amigable posible. En parte, esto depende de la entrada que recibe tu script, pero en muchos casos, deberías considerar la posibilidad de convertir la entrada en objetos de fecha de AppleScript, que entonces te permite calcular las diferencias fácilmente y te devuelve un número real que puedes manipular para adquirir una medida en días, minutos, horas, etc.
El ejemplo script de abajo asume una cadena de fecha con formato ISO 8601 como entrada, es decir. "yyyy-mm-dd"
aunque se podría adaptar el script para atender a otros formatos de entrada:
# 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 ]