1 votos

Automator mantiene el uso de los números en forma exponencial

He creado este código que debe de lanzamiento de whatsapp con un número específico en el portapapeles:

on run {input, parameters}
    set text1 to the clipboard
        set text2 to 1 - text1 as real
        do shell script "open https://api.whatsapp.com/send?phone=971" & 1 - text2
    return input
end run

*

Las sustracciones se agregan para copiar el número correcto en la forma

*

Sin embargo, el número de teléfono se expresa en una forma exponencial lo que da un error.

Example: 0501234567
Expected Output: 971501234567
Actual  Output : 9715.01234567E+8

¿Cómo puedo solucionar este problema?

1voto

klanomath Puntos 19587

Una forma sencilla y rápida requiere para instalar una scripting edition Satimage.osax (directo d/l) y trabaja con expresiones regulares. El certificado de la pkg tristemente caducado!

on run {input, parameters}
    set text1 to change "^0+" into "" in (the clipboard as string) with regexp
    do shell script "open https://api.whatsapp.com/send?phone=971" & text1
    return input
end run

^0+ tiras de ceros a la izquierda!


Un segundo con sed , pero no hay instalaciones adicionales:

on run {input, parameters}
    set text1 to do shell script "echo " & quoted form of (the clipboard as string) & " | sed 's/^0*//'"
    do shell script "open https://api.whatsapp.com/send?phone=971" & text1
    return input
end run
  • quoted form of (the clipboard as string): '0501234567'
  • do shell script "echo " & '0501234567' & " | sed 's/^0*//'": ejecutar comandos de shell echo '0501234567' | sed 's/^0*//' en un script de Apple
  • echo '0501234567' | sed 's/^0*//': enviar la salida de echo para el editor de flujo sed y hacer algo con ella
  • ^0*: regular la expresión: ^ = inicio de la línea * = cuantificador - partidos entre cero y un número ilimitado de veces, tantas veces como sea posible
  • 's/^0*//': 's/reg_ex/replacement/': sustituir la cadena de reemplazo para la primera instancia de la expresión regular en el espacio en el patrón. Esto significa: reemplazar como muchos ceros a la izquierda como sea posible con la cadena de reemplazo (=NIL/nada) = tira de los ceros a la izquierda
  • set text1 to ...: $text1=501234567
  • do shell script "open https://api.whatsapp.com/send?phone=971" & text1: open https://api.whatsapp.com/send?phone=971501234567

Ambos probado en 10.11.6 (El Capitan) solamente.

1voto

user3439894 Puntos 5883

Mirando su ejemplo 0501234567 y su esperada salida 971501234567, entonces estoy asumiendo todo lo que realmente están tratando de hacer es pelar el primer carácter de 0501234567, de lo que está en el portapapeles, y anexar 501234567 a la URL https://api.whatsapp.com/send?phone=971 , de modo que usted tiene https://api.whatsapp.com/send?phone=971501234567 como la URL para su uso con el open comando en la do shell script comando.

Si estoy entendiendo su necesidad correctamente, a continuación, simplemente esto es todo lo que usted necesita:

do shell script ¬
    "open https://api.whatsapp.com/send?phone=971" & ¬
    text 2 thru -1 of (the clipboard as text)
  • Tenga en cuenta que el uso del carácter de continuación de línea ¬ no es necesario, estoy usando es para toda la línea de comandos muestra sin tener que desplazarse.

El número de teléfono por ejemplo 0501234567 en el portapapeles después de todo no es un número real en el sentido de un número entero de que los cálculos matemáticos necesitan realizarse en ella, en este caso de uso. Es simplemente una cadena de texto de caracteres numéricos por la manera en que debe ser utilizado y debe ser expresamente tratada como tal.

0voto

Steve Evans Puntos 155

convertNumberToString

Mac de Apple Automatización de secuencias de comandos Guía contiene el siguiente código en la Manipulación de los Números de sección titulada la Conversión de un Número Largo de una Cadena:

En AppleScript, larga valores numéricos se muestran en notación científica. Por ejemplo, 1234000000 se muestra una secuencia de comandos como 1.234E+9. Cuando este valor es obligada a una cadena, se convierte en: "1.234E+9". El controlador (abajo) en el Listado de 20-3 convierte un número, independientemente de la longitud, a una cadena de caracteres numéricos en lugar de una cadena numérica en notación científica.

set myNumber to 1 - "0501234567" as real
set myResult to "971" & convertNumberToString(1 - myNumber)

-- https://developer.apple.com/library/archive/documentation/LanguagesUtilities/Conceptual/MacAutomationScriptingGuide/ManipulateNumbers.html
on convertNumberToString(theNumber)
    set theNumberString to theNumber as string
    set theOffset to offset of "E" in theNumberString
    if theOffset = 0 then return theNumberString
    set thePrefix to text 1 thru (theOffset - 1) of theNumberString
    set theConvertedNumberPrefix to ""
    if thePrefix begins with "-" then
        set theConvertedNumberPrefix to "-"
        if thePrefix = "-" then
            set thePrefix to ""
        else
            set thePrefix to text 2 thru -1 of thePrefix
        end if
    end if
    set theDecimalAdjustment to (text (theOffset + 1) thru -1 of theNumberString) as number
    set isNegativeDecimalAdjustment to theDecimalAdjustment is less than 0
    if isNegativeDecimalAdjustment then
        set thePrefix to (reverse of (characters of thePrefix)) as string
        set theDecimalAdjustment to -theDecimalAdjustment
    end if
    set theDecimalOffset to offset of "." in thePrefix
    if theDecimalOffset = 0 then
        set theFirstPart to ""
    else
        set theFirstPart to text 1 thru (theDecimalOffset - 1) of thePrefix
    end if
    set theSecondPart to text (theDecimalOffset + 1) thru -1 of thePrefix
    set theConvertedNumber to theFirstPart
    set theRepeatCount to theDecimalAdjustment
    if (length of theSecondPart) is greater than theRepeatCount then set theRepeatCount to length of theSecondPart
    repeat with a from 1 to theRepeatCount
        try
            set theConvertedNumber to theConvertedNumber & character a of theSecondPart
        on error
            set theConvertedNumber to theConvertedNumber & "0"
        end try
        if a = theDecimalAdjustment and a is not equal to (length of theSecondPart) then set theConvertedNumber to theConvertedNumber & "."
    end repeat
    if theConvertedNumber ends with "." then set theConvertedNumber to theConvertedNumber & "0"
    if isNegativeDecimalAdjustment then set theConvertedNumber to (reverse of (characters of theConvertedNumber)) as string
    return theConvertedNumberPrefix & theConvertedNumber
end convertNumberToString

0voto

David Anderson Puntos 2189

Esto convierte una cadena a entero decimal, luego de vuelta a una cadena. Esto elimina cualquier anterior ceros.

on run {input, parameters}
    set text1 to the clipboard
    if false then -- set to true if you need whitespace removed.
        set AppleScript's text item delimiters to {space, tab, linefeed, return}
        set text1 to text items of text1
        set AppleScript's text item delimiters to {}
        set text1 to text1 as string
    end if
    set text2 to "$((10#" & text1 & "))"
    do shell script "open https://api.whatsapp.com/send?phone=971" & text2
    return input
end run

Example: 0501234567
Actual Output : 971501234567

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X