Pages

3 mai 2009

AppleScript 1 - UNIX 0

Compte le nombre d'occurences d'un caractère à l'intérieur d'un texte.

AScountChar("hébété", "é")
UNIXcountChar("hébété", "é")

-- Retourne le nombre d'occurence d'un caractère d'un texte.
on AScountChar(theString, charToSearch)
set text item delimiters of AppleScript to charToSearch
set la_liste to text items of theString
set text item delimiters of AppleScript to ""
return (count la_liste) - 1
end AScountChar

Auteur :  Fred;o

-- la même chose en Shell UNIX
on UNIXcountChar(theString, chartoFind)
return (do shell script "echo" & quote & theString & quote & " | tr -cd " & quote & chartoFind & quote & " | wc -c") as number
end UNIXcountChar

>>Ouvrir le script dans l'éditeur

3 commentaires:

Fredo a dit…

Salut Sergueï :-)

Merci pour le petit commentaire sur mon BlogAs...
Juste un mot pour dire qu'il y a une petite erreur dans le code de la fonction "AScountChar", il faudrait intervertir les variables "charToSearch" et "theString" pour que ça marche correctement...

Par ailleurs, je n'obtient pas le même résultat avec les deux routines, mais comme je ne suis toujours pas à l'aise avec le Shell, je suis incapable de savoir où ça cloche...

Sinon, très intéressant ton blog, les recherches autour d'automator et les réflexions sur le scripting (les citations de Gwénaël sont très pertinentes et toujours d'actualité)...

@+:-)
Fredo

Anonyme a dit…

Oups, j'ai remis les paramètres de la routine AppleScript dans le bon ordre. Merci Fredo. En ce qui concerne la partie UNIX le résultat est faux s'il s'agit de rechercher des caractères diacritiques, il est correct dans les autres cas c'est une des faiblesses d'UNIX. C'etait le sens du titre un peu provocateur de ce message à la manière d'une rencontre sportive : AppleScript 1 - UNIX 0 :-))

Fredo a dit…

Ha d'accord... j'avais bien compris sinon le score du face-à-face évoqué par le titre, mais j'avais plutôt pensé aux performances obtenues lors de l'exécution des deux fonctions, car, la aussi, AS bat nettement Unix.

Par exemple, sur un test de 100 tours de boucle pour chaque fonction, j'obtiens chez moi les résultats suivants : As = 2 ticks, Shell = 261 ticks (!?)

Bref, cela montre encore une fois la formidable efficacité des "text item delimiters" d'As...

@+ :-)
Fredo

PS. Tiens, le système de commentaires de ce blog n'accepte pas les liens avec le protocole "applescript:", dommage... :-(