1 votes

Applescript échoue même si les variables sont égales

J'ai un fichier qui est une liste de chiffres comme ceci :

01

02

03

04

...

241

242

Cependant, comme il a été généré à partir d'une liste de fichiers, je ne suis pas sûr qu'il contienne tous les numéros dans l'ordre du début à la fin, inclusivement (ce qui signifie qu'il pourrait être "13 15" au lieu de "13 14 15").

Mon applescript vérifie cela, et bien que cela semble être simple, mon applescript échoue au nombre 10 et au-delà, même si mes dialogues disent que les nombres x et y sont tous deux égaux. Et par "échouer", je veux dire qu'il me dit que les nombres 10 et plus sont manquants, même s'ils ne devraient pas l'être, car x est égal à y à ce moment-là.

Voici mon applescript, et la liste peut être trouvée 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 Points 362

Votre x sont des chaînes de caractères lorsque la valeur est inférieure à dix (car vous utilisez la concaténation de chaînes de caractères pour ajouter un zéro), mais ce sont des nombres simples lorsque la valeur est supérieure ou égale à dix.

Votre y sont toujours des chaînes de caractères.

Ainsi, pour les valeurs inférieures à dix, votre comparaison finale compare une chaîne de caractères à une chaîne de caractères ; cela fonctionne comme prévu. Pour les valeurs supérieures, la comparaison donnera toujours false car il s'agit de comparer un nombre à une chaîne de caractères.


Si vous voulez des correspondances exactes, vous pouvez utiliser ce code de comparaison :

if y is not equal to x as string then …

Si vous ne vous intéressez qu'aux valeurs numériques, vous pouvez supprimer le code de préfixation du zéro et utiliser cette comparaison :

if y as number is not equal to x then …

De manière équivalente, vous pourriez effectuer la coercition lorsque vous récupérez le fichier y valeur :

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

Les parenthèses sont nécessaires ici car do shell script a sa propre option as qui n'est pas la même chose que la coercition normale.

1voto

Kaydell Points 289

Voici mes deux centimes d'euros.

Dans le code suivant, la classe (ou le type) de x est modifiée après la contaténation du texte "0", qui passe d'un entier à un texte.

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

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X