1 votos

Applescript fallando incluso a pesar de que las variables son iguales

Tengo un archivo que es una lista de números así:

01

02

03

04

...

241

242

Sin embargo, este fue generado a partir de una lista de archivos, así que no estoy seguro de si contiene todos los números en la secuencia de inicio a fin, incluido (lo que Significa que podría ser "el 13 de 15" en lugar de "13 14 15").

Mi applescript comprueba que, y aunque parecía que iba a ser sencillo, mi applescript produce un error en el número 10 y más allá, a pesar de que mi diálogos decir que los números x e y son iguales. Y por fallar quiero decir que me está diciendo los números 10 y faltan aunque no debería ser, porque x es igual a y en ese momento.

Aquí está mi applescript, y la lista puede ser encontrado aquí.

set x to 0

repeat 242 times

    set x to x + 1
    if x is less than 10 then
        set x to "0" & x
    end if

    display dialog "x is set to " & x

    #Get's the x'th line of the file and sets it to y
    set y to do shell script "sed -n '" & x & "p' ~/Desktop/numlist.txt"

    display dialog "y result is " & y

    if y is not equal to x then
            display dialog "The number " & x & " is missing!"
        #exit repeat 
    end if

end repeat

2voto

Nip Puntos 362

Su x valores son cadenas cuando el valor es inferior a diez (porque utiliza la concatenación de cadenas para anteponer un cero), sin embargo, no son simples números cuando el valor es mayor o igual a diez.

Su y valores son siempre cadenas de caracteres.

Así, para valores de menos de diez, la última comparación que compara un string con una cadena; esto funciona como se esperaba. Para valores mayores, la comparación siempre será el rendimiento false porque es la comparación de un número a una cadena.


Si desea exacto de la cadena de partidos, entonces usted puede utilizar este código de comparación:

if y is not equal to x as string then …

Si sólo se preocupan por los valores numéricos, entonces usted podría quitar el cero-el prefijo de código y el uso de esta comparación:

if y as number is not equal to x then …

Equivalentemente, se podría hacer la coacción al recuperar la y valor:

set y to (do shell script "sed -n '" & x & "p' ~/Desktop/numlist.txt") as number

Los paréntesis son necesarios allí porque do shell script tiene su propio facultativo as parámetro que no es el mismo que el normal de la coerción.

1voto

Kaydell Puntos 229

He aquí mis dos centavos la pena.

En el código siguiente, la clase (o tipo) de x se cambia después de contatenating el texto de "0" a de un número entero en el texto.

set x to 0
set x to x + 1
if x is less than 10 then
    display dialog "At point 1, class of x: " & (class of x)
    set x to "0" & x
    display dialog "At point 2, class of x: " & (class of x)
end if

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