2 votos

Applescript - cómo contar la longitud entera?

Así que estaba haciendo este programa que escribiría cada número entre 0 y 9999, pero necesito que sea de 4 caracteres de largo, no importa lo que el recuento de dígitos es - la única manera de hacerlo, creo, es tener el programa de contar el dígitos y luego ponerlo en una variable, restando esa variable de 4 y añadiendo ese número de ceros antes del número mismo.

¿Cómo puede AppleScript contar los dígitos? ¿Hay incluso una manera de hacerlo en absoluto?

5voto

klanomath Puntos 19587

Desarrollador de Apple > Mac Automatización de secuencias de comandos Guía contiene un ejemplo de cómo agregar ceros a la izquierda hasta un número de AppleScript así como el código JavaScript:

La adición de Ceros a la izquierda hasta un Número

Los controladores en el Listado 20-11 y Listado de 20-12 convertir un número en una cadena y se antepone con ceros a la izquierda hasta llegar a una cierta longitud. Que acepta dos parámetros: el número para agregar ceros a la izquierda y el número máximo de ceros a la izquierda para agregar. Por ejemplo, si el número máximo de ceros a la izquierda es 2, los resultados gama de 001 a 999. Si el número máximo de ceros a la izquierda es de 3, los resultados del rango de 0001 a 9999, y así sucesivamente.

AppleScript listado:

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 compruebe el enlace.

3voto

user3439894 Puntos 5883

Aquí hay un simple controlador que, almohadillas basadas en su pregunta.

Ejemplo de código AppleScript:

 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 acolchados entre 0 y 1000 para mostrar el relleno está teniendo lugar.

 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
 

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