Pages

6 juil. 2008

DataBase (1/5)

property allCards : {} -- liste des scripts objets  
property myQuote : ASCII character (34)
on run
set dataFilePath to ((path to me) as string) & "Contents:Resources:data.txt" -- fichier data
if allCards is {} then
set theData to read_file(dataFilePath as alias)
if theData is in {false, "list"} then
set allCards to {} -- fichier data.txt vide
else
set allCards to theData -- chargement scripts objets
end if
end if
repeat
set btn to button returned of (display dialog "DataBase" buttons {"Quit", "New card...", "All cards"} default button 3 with icon 1)
if btn = "Quit" then
write_file(allCards, dataFilePath as alias)
exit repeat
else
if btn = "New card..." then
newCard()
else if btn = "All cards" then
CardList()
end if
write_file(allCards, dataFilePath as alias)
end if
end repeat
end run

>>Ouvrir le script dans l'éditeur
Exemple de base de données qui gère une bibliothèque illustrant la methode objet. Le script doit être enregistré au format "Application Bundle" pour contenir un fichier texte "data.txt" stockant les données. Le fichier "data.txt" est accessible par ctrl-clic ou clic droit sur le script puis menu contextuel "Show Package Contents".

1/5) Le script principal on run/end run gère l'interface de saisie des fiches de la bases de données. La base de données est chargée au lancement du script dans la variable "theData". Chaque fiche est une instance du script objet contenu dans le handler "createCard". Les fiches sont stockées dans la variable "allCards" qui est une liste des instances du script objet. Les differents items de chaque fiche (auteur, titre, sujet, édition) sont stockés dans les propriétés (property) de chaque instance du script objet.

2/5) Le handler CardList gère l'affichage des fiches, l'effacement d'une fiche et la recherche d'une fiche dans la base de données.

3/5) Le handler newCard crée une nouvelle fiche.

4/5) Le handler createCard contient le script objet proprement dit. Les fiches sont des instances de ce script objet qui sert de modèle. Les differents items de chaque fiche (auteur, titre, sujet, édition) sont stockés dans les propriétés de l'instance du script objet. Les deux handlers "getInfos" et "getInfos2" servent respectivement à l'affichage des fiches et à la recherche d'une fiche.

5/5) Les handlers read_file, write_file, checkEmptyDialog, ItemNumber et ASTID gèrent "les affaires courantes" comme dans un script classique, à savoir : Lecture du contenu d'un fichier, écriture dans un fichier, test de saisie d'une boite de dialogue, numéro d'item dans une liste, fixation du délimitateur d'item dans un script.

3 juin 2008

Chrono

script chrono
property time1 : null
property time2 : null
property theCount : null
on start() -- start chrono
set theCount to 0
set time1 to (the current date)
end start
on break() -- stop chrono
set time2 to (the current date)
activate
if theCount is not null then
display dialog (theCount as string) & plural(" item", theCount) & " proceded in " & formatSeconds(round (time2 - time1)) & " ." buttons {"OK"} default button 1 with icon 1 giving up after 10
else
display dialog "Process completed in " & formatSeconds(round (time2 - time1)) & " ." buttons {"OK"} default button 1 with icon 1 giving up after 10
end if
end break
on countLoop() -- increase counter
set theCount to theCount + 1
end countLoop
on formatSeconds(theSeconds)
set {h, m, s} to {theSeconds div 3600, (theSeconds mod 3600) div 60, (theSeconds mod 3600) mod 60}
return h & ":" & twoDigit(m) & ":" & twoDigit(s) as string
end formatSeconds
on twoDigit(theNumber) -- add zero before one digit number
if theNumber < 10 then set theNumber to "0" & theNumber
return theNumber as string
end twoDigit
on plural(theString, num) -- add "s" after a string if num> 1
if num > 1 then set theString to theString & "s"
return theString
end plural
end script

>>Ouvrir le script dans l'éditeur

Quantifie le gain de temps d'un operation automatisée vs "à la main" au prix d'un léger ralentissement si appel à la routine countloop()

tell chrono to start() -- Initialisation chronomètre : A placer au debut du script utilisateur
tell chrono to countLoop() -- incrementation  compteur : A placer (facultatif) dans le script utilisateur, par ex. dans une routine qui renomme des fichiers.
tell chrono to break() -- Arrêt du chronomètre : A placer à la fin du script utilisateur.

2 juin 2008

Multiple find replace

on nFindReplace(theText, string1, string2) -- multiple search replace
repeat with i from 1 to the length of my string1
set AppleScript's text item delimiters to character i of string1
set theList to text items of theText
set AppleScript's text item delimiters to character i of string2
set theText to theList as text
end repeat
set AppleScript's text item delimiters to ""
return theText
end nFindReplace

>>Ouvrir le script dans l'éditeur

Find replace

on findReplace(theString, oldChar, newChar) -- search replace
set AppleScript's text item delimiters to oldChar
set theList to text items of theString
set AppleScript's text item delimiters to newChar
set theString to theList as text
set AppleScript's text item delimiters to ""
return theString
end findReplace

>>Ouvrir le script dans l'éditeur

Space to underscore (8/8)

script space2underscore -- Remplacer espace par underscore
property parent : deleteSpace
property string1 : " "
property string2 : "_"
end script

>>Ouvrir le script dans l'éditeur