Errore di Applescript anche se le variabili sono uguali

1

Ho un file che è un elenco di numeri come questo:

01

02

03

04

...

241

242

Tuttavia, questo è stato generato da un elenco di file quindi non sono sicuro che contenga tutti i numeri in sequenza dall'inizio alla fine, compresi (Significa che potrebbe essere "13 15" invece di "13 14 15").

Il mio applescript lo controlla, e sebbene sembrasse che fosse semplice, il mio applecript fallisce al numero 10 e oltre, anche se i miei dialoghi dicono che i numeri xey sono uguali. E per errore intendo che mi sta dicendo che i numeri 10 e on mancano anche se non dovrebbe esserlo, perché x è uguale a y in quel punto.

Ecco il mio applescript e l'elenco può essere trovato qui .

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
    
posta fredie mathews 24.08.2013 - 07:13
fonte

2 risposte

2

I tuoi valori di x sono stringhe quando il valore è inferiore a dieci (perché si utilizza la concatenazione di stringhe per anteporre uno zero), tuttavia sono numeri semplici quando il valore è maggiore o uguale a dieci.

I tuoi valori di y sono sempre stringhe.

Quindi, per valori inferiori a dieci, il confronto finale confronta una stringa con una stringa; funziona come previsto Per valori più alti, il confronto restituirà sempre false perché confronta un numero con una stringa.

Se desideri corrispondenze di stringhe esatte, puoi utilizzare questo codice di confronto:

if y is not equal to x as string then …

Se ti interessano solo valori numerici, puoi rimuovere il codice con prefisso zero e utilizzare questo confronto:

if y as number is not equal to x then …

Equivalentemente, potresti eseguire la coercizione quando recuperi il valore di y :

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

Le parentesi sono necessarie lì perché do shell script ha il proprio parametro as opzionale che non è lo stesso della normale coercizione.

    
risposta data 24.08.2013 - 07:42
fonte
1

Ecco i miei due centesimi.

Nel seguente codice, la classe (o il tipo) di x viene cambiata dopo aver contatato il testo "0" da un intero al testo.

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
    
risposta data 24.08.2013 - 17:41
fonte

Leggi altre domande sui tag