1 votes

Automator continue d'utiliser des nombres sous forme exponentielle

J'ai créé ce code qui devrait lancer whatsapp avec un numéro spécifique dans le presse-papiers :

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

*

Les soustractions sont additionnées pour copier le nombre correct sous la forme

*

Cependant, le numéro de téléphone est indiqué sous une forme exponentielle, ce qui donne une erreur.

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

Comment puis-je réparer cela ?

1voto

klanomath Points 63400

Un moyen simple et rapide consiste à installer une édition de script. Satimage.osax ( direct d/l ) et fonctionne avec regex. Le certificat du pkg a malheureusement expiré !

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+ supprime les zéros de tête !


Un deuxième avec sed mais pas d'installation supplémentaire :

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*//'" : exécuter une commande shell echo '0501234567' | sed 's/^0*//' dans un script d'Apple
  • echo '0501234567' | sed 's/^0*//' : envoyer la sortie de echo vers l'éditeur de flux sed et faire quelque chose avec ça
  • ^0* : expression régulière : ^ = début de la ligne * = quantificateur - correspond entre zéro et un nombre illimité de fois, autant de fois que possible
  • 's/^0*//' : 's/reg_ex/replacement/' : remplace la chaîne de remplacement par la première instance de l'expression régulière dans l'espace de motif. Cela signifie : remplacer autant de zéros de tête que possible par la chaîne de remplacement. (=NIL/rien) \= enlever les zéros de tête
  • 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

Les deux ont été testés dans la version 10.11.6 (El Capitan) uniquement.

0voto

Graham Miln Points 39606

ConvertNumberToString

Le Mac Automation Scripting Guide d'Apple contient le code suivant dans la section Manipulation des chiffres section intitulée Conversion d'un nombre long en chaîne de caractères :

Dans AppleScript, les valeurs numériques longues sont affichées en notation scientifique. Par exemple, 1234000000 est affiché par un script en tant que 1.234E+9 . Lorsque cette valeur est convertie en une chaîne de caractères, elle devient : "1.234E+9" . Le gestionnaire (ci-dessous) du Listing 20-3 convertit un nombre, quelle que soit sa longueur, en une chaîne de caractères numériques au lieu d'une chaîne numérique en notation scientifique.

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 Points 30783

Ceci convertit une chaîne de caractères en un nombre entier décimal, puis de nouveau en une chaîne de caractères. Elle élimine les zéros précédents.

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

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