Applescript falla aunque las variables son iguales

1

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

  

01

     

02

     

03

     

04

     

...

     

241

     

242

Sin embargo, esto se generó a partir de una lista de archivos, por lo que no estoy seguro de si contiene todos los números en secuencia de principio a fin, inclusive (lo que significa que podría ser "13 15" en lugar de "13 14 15").

Mi applecript lo comprueba, y aunque parecía que iba a ser simple, mi applecript falla en el número 10 y más allá, aunque mis diálogos dicen que los números x e y son iguales. Y por error quiero decir que me está diciendo que faltan los números 10 y más, aunque no debería ser, porque x es igual a y en ese punto.

Aquí está mi applecript, y la lista se puede encontrar 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
    
pregunta fredie mathews 24.08.2013 - 07:13

2 respuestas

2

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

Sus valores y son siempre cadenas.

Entonces, para valores menores de diez, su comparación final compara una cadena con una cadena; esto funciona como se esperaba. Para valores más altos, la comparación siempre producirá false porque está comparando un número con una cadena.

Si desea coincidencias de cadena exactas, puede usar este código de comparación:

if y is not equal to x as string then …

Si solo te preocupan los valores numéricos, entonces podrías eliminar el código de prefijo cero y usar esta comparación:

if y as number is not equal to x then …

De manera equivalente, podrías hacer la coacción cuando obtengas el valor y :

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 parámetro opcional as que no es lo mismo que la coerción normal.

    
respondido por el Chris Johnsen 24.08.2013 - 07:42
1

Aquí está el valor de mis dos centavos.

En el siguiente código, la clase (o tipo) de x se cambia después de contatenar el texto "0" de un entero a 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
    
respondido por el Kaydell 24.08.2013 - 17:41

Lea otras preguntas en las etiquetas