AppleScript: ¿cómo contar la longitud de un entero?

2

Así que estaba creando este programa que escribiría todos los números entre 0 y 9999, pero necesito que tenga 4 caracteres de longitud, no importa cuál sea el recuento de dígitos. Creo que la única forma de hacerlo es haga que el programa cuente los dígitos y luego póngalos en una variable, restando esa variable de 4 y agregando ese número de ceros antes del número en sí.

¿Cómo puede AppleScript contar los dígitos? ¿Hay alguna forma de hacerlo?

    
pregunta Prokop Hanzl 22.09.2017 - 19:48

2 respuestas

3

Aquí hay un simple controlador que, se basa en su pregunta.

Código AppleScript de ejemplo:

set theNumber to 1

set theNumber to padNumberAsString(theNumber)

on padNumberAsString(n)
    set theLength to (get length of (n as string))
    if theLength is equal to 1 then
        set n to "000" & n
    else if theLength is equal to 2 then
        set n to "00" & n
    else if theLength is equal to 3 then
        set n to "0" & n
    end if
    return n
end padNumberAsString
  

Resultado: "0001"

Como demostración, esto crea y muestra una lista de los números rellenados entre 0 y 1000 para mostrar que se está realizando el relleno.

set thePaddedList to {}
repeat with i from 0 to 1000
    set end of thePaddedList to padNumberAsString(i)
end repeat
choose from list thePaddedList

on padNumberAsString(n)
    set theLength to (get length of (n as string))
    if theLength is equal to 1 then
        set n to "000" & n
    else if theLength is equal to 2 then
        set n to "00" & n
    else if theLength is equal to 3 then
        set n to "0" & n
    end if
    return n
end padNumberAsString
    
respondido por el user3439894 22.09.2017 - 20:53
4

Desarrollador de Apple > Mac Automation Scripting Guide contiene una ejemplo cómo agregar ceros iniciales a un número como AppleScript y código JavaScript:

  

Agregar ceros a un número

     

Los manejadores del Listado 20-11 y del Listado 20-12 convierten un número en una cadena y lo añaden con ceros iniciales hasta que alcancen una cierta longitud. Aceptan dos parámetros: el número para agregar ceros iniciales y el número máximo de ceros iniciales para agregar. Por ejemplo, si el número máximo de ceros a la izquierda se establece en 2, los resultados varían de 001 a 999. Si el número máximo de ceros a la izquierda es 3, los resultados van de 0001 a 9999, y así sucesivamente.

Listado de AppleScript:

on addLeadingZerosToNumber(theNumber, theMaxLeadingZeroCount)
    -- Determine if the number is negative
    set isNegative to theNumber is less than 0

    -- Determine when the maximum number of digits will be reached
    set theThreshold to (10 ^ theMaxLeadingZeroCount) as integer

    -- If the number is shorter than the maximum number of digits
    if theNumber is less than theThreshold then
        -- If the number is negative, convert it to positive
        if isNegative = true then set theNumber to -theNumber

        -- Add the zeros to the number
        set theLeadingZeros to ""
        set theDigitCount to length of ((theNumber div 1) as string)
        set theCharacterCount to (theMaxLeadingZeroCount + 1) - theDigitCount
        repeat theCharacterCount times
            set theLeadingZeros to (theLeadingZeros & "0") as string
        end repeat

        -- Make the number negative, if it was previously negative
        if isNegative = true then set theLeadingZeros to "-" & theLeadingZeros

        -- Return the prefixed number
        return (theLeadingZeros & (theNumber as text)) as string

      -- If the number is greater than or equal to the maximum number of digits
    else
        -- Return the original number
        return theNumber as text
    end if
end addLeadingZerosToNumber

Si prefieres JavaScript, comprueba el enlace.

    
respondido por el klanomath 22.09.2017 - 20:17

Lea otras preguntas en las etiquetas