FAQ2

SUJET :
atteindre une cellule d'un tableur mis dans un traitement de texte

QUESTION :
Je voudrais savoir comment accédé à un tableur insérer dans un traitement de texte comme appleworks 6 : pour pouvoir y mettre un prix H.T récupérer dans Hypercard
Achin

REPONSE :
Pour mettre un prix dans une cellule d'AppleWorks c'est du type :
tell application "AppleWorks"
set cell "A1" of spreadsheet of spreadsheet frame 1 of drawing area of document 1 to "1"
tell
- en prenant soin de mettre le résultat au format texte pour les versions antérieures à 6 : le tableur n'aimait pas recevoir des nombres directement.
- le numéro du spreadsheet frame est égal à l'ordre inverse de la création, le dernier créé prend le numéro 1 et tous les autres sont renumérotés en suivant.


SUJET :
faire une recherche de fichiers sur un ou plusieurs volumes

QUESTION :
Je suis un débutant et je souhaite faire rechercher à Applescript tous les fichiers se trouvant dans un dossier (y compris, voire surtout, si ce dernier possède des sous-dossiers) et de les lui faire extraire dans un nouveau dossier.
Pourriez-vous m'aider s.v.p. en me fournissant un Script du même genre ?
Merci d'avance
Thierry Clerc

REPONSE :
La recherche par AppleScript lui-même est extrêmement lente. Il vaut mieux passer par un fichier de Sherlock, même si cela demande un peu plus de manipulations, le gain obtenu en vaut la peine.
Voici un exemple de script (en pièce jointe) : Cherche with Sherlock
Ce script sert à modifier les mémoires allouées à un programme donné. Ces programmes sont dessiminés un peu partout, sherlock en établi la liste et AppleScript met la nouvelle mémoire allouée à chaque programme trouvé par Sherlock.
Bien sûr cela n'a d'intérêt que si il y a beaucoup de programme qui ont la même signature, ce qui est rare. Ceci n'est donc qu'un exemple.
Principe général :
- Depuis sherlock, établir la recherche puis enregistrer le critère de recherche depuis le menu Fichier.
- Dans le script AppleScript, lancer la recherche Sherlock avec ce fichier de critère de recherche, le résultat sera sous forme de liste de fichiers correspondant à ce critère.
- Dans une boucle, pour le nombre de fichiers trouvés, faire le traitement sur ces fichiers.

-- Début du script "Cherche with Sherlock"--
on run
set |Mes Critères| to choose file with prompt "Ouvrir les critères de recherche :" of type "find"
tell application "Sherlock"
activate
set |Liste des MacCité| to search using |Mes Critères|
quit
end tell
display dialog "Mémoire souhaitée : " default answer "2048" buttons {"Annuler", "Mettre à jour"} default button 2 with icon 1
set |Taille souhaitée| to text returned of result
repeat with |à traiter| in |Liste des MacCité|
tell application "Finder"
launch
if minimum size of |à traiter| < 512 then set minimum size of |à traiter| to 512
set total partition size of |à traiter| to |Taille souhaitée|
end tell
end repeat
tell me to activate
beep
display dialog "Traitement terminé" buttons {"Vu"} default button 1 with icon 1
quit
end run

-- Fin du script --


SUJET :
Piloter un changement de config ARA

QUESTION :
je recherche un script qui me permet de piloter un changement de configuration ARA, pour passer d'un fournisseur d'accès à un autre.
Quelqu'un peut-il me donner des pistes ?
Merci
Benoit Henriet

REPONSE :
Il existe plusieurs possibilités suivant ce que l'on veut obtenir :
- Tous les fournisseurs utilisent le même protocole: PPP par exemple. Dans ce cas le plus simple c'est de configurer le Tableau de bord TCP/IP sur PPP et de ne rien mettre dans les adresses de serveurs et de domaine de recherche Puis dans le tableau de bord Remote Access, j'ai créé autant de configuration que de provider avec le nom d'utilisateur, mot de passe etc...
Pour changer de fournisseur, il me suffit alors de le choisir depuis le module de Remote Acces de la barre des réglages.
- Il faut changer de protocole: un sur PPP l'autre sur Ethernet .... Là on peut utiliser le tableau de bord Réglages de mobilité afin de configurer plusieurs environnement de réseau.
Ensuite il suffit de changer de configuration depuis le module Réglages de mobilité de la barre des réglages.
- Enfin c'est plus complexe, ou on veut automatiser plusieurs connections etc.. dans ce cas le dictionnaire se trouve dans le complément de pilotage "Pilotage réglages réseau" du dossier "Compléments de pilotage" du dossier système.

SUJET :
Envoyer des paramètres à un script
Lire un fichier texte, en extraire l'adresse d'un fichier à dupliquer et l'endroit de la duplication.

QUESTION :
Bonjour,
je souhaite realiser l'equivalent du .BAT suivant des PC en Applescript
Copie.BATCOPY %1 %2
Ce qui me permet depuis un programme 4D d'executer COPIE FICHIER_SOURCE FICHIER_DEST
En d'autre termes, peut on passer des parametres a l'execution d'un script, si oui, comment?
Sinon, pour m'en sortir, j'aimerais pouvoir lire ligne par ligne le contenu d'un fichier et en effectuer la copie.Ex: J'ai un fichier LISTE sur le bureau contenant plusieurs lignes. Chaque ligne m'indique le nom d'un fichier a dupliquer et l'emplacement de sa copie
Contenu du fichier LISTE:
hd green imac:xxx:xxx:fichier_source1 hd green imac:backup:fichier_1_dupliqué
hd green imac:xxx:xxx:fichier_source2 hd green imac:backup:fichier_2_dupliqué
Le but est le lire la premiere ligne du fichier LISTE et de dupliquer fichier_source1 dans backup, puis la ligne 2 etc...Je n'ai trouvé aucune info sur cela, aidez moi.Merci.
Sébastien Béal

REPONSE :
Pour envoyer un paramètre à un script, plusieurs méthodes sont possibles avec l'utilisation des variables globales, mais le plus simple reste l'utilisation des routines. Il suffit d'appeler la routine en passant les variables, comme n'importe quel routine.
Lorsqu'un script est lancé, il s'éxécute automatiquement, ce qui empêche l'appelle à une routine de ce script, puisqu'il quittera avant l'appelle de la dite routine. Par conséquent il ne faut oublier le "launch" pour bloquer cette exécution automatique.
Par exemple: nous avons deux scripts, un qui s'appelle "envois" et un qui s'appelle "recois".
-- Début du Script "envois" --
tell application "recois"
launch
test("Bobo")
end tell
-- Fin du Script "envois" --
Le script appelle le script "recois" (enregistrer sous forme d'application), empêche son éxécution automatique par un "launch", puis appelle la routine "test" en passant le paramètre "Bobo".
--Début du Script "recois" --
on test(Mes)
activate
display dialog Mes
end test
-- Fin du Script "recois" --
ce script emet un message, avec le paramètre envoyé comme texte.
Pour exploiter un fichier, il faut tout d'abord définir sa structure. On peut utiliser la structure standard tab tab return, mais aussi n'importe quel autre délimiteur de champ et de fiche. Dans mon exemple je vais employer le délimiteur de champ une virgule et comme délimiteur de fiche un Return.
Chaque fiche comportera 2 champs : l'adresse du fichier à copier et l'adresse de l'endroit où le dupliquer. Ceci nous donne par exemple :
"hd green imac:xxx:xxx:fichier_source1,hd green imac:backup:
disque:fichier,disque:fichier2:"
Ce fichier est enregistrer en texte sous le nom "Fichier" dans le volume "Disque". Pour lire ce fichier et le mettre dans une variable la syntaxe est du type :
set Fich to alias "disque:fichier"
open for access Fich without write permission
set ContientF to read Fichier
close access Fichier
Il faut indiquer où se trouve le fichier, soit par une adresse fixe, comme ici : alias "disque:fichier", soit en par une demande de sa localisation avec la commande choose file.
Ouvrir ce fichier par un open for access, en indiquant si on l'ouvre en lecture seule, comme dans le cas présent, ou non.
Lire ce fichier et mettre le contenu dans une variable. Il y a une limite de 32 Ko par lecture, si le fichier dépasse ces 32 Ko il faut augmenter la structure du programme pour lire par tranche de 32 Ko ou moins.
Enfin ne pas oublier de fermer le fichier.
Pour triter le contenu du fichier, nous allons boucler sur le nombre de fiche, puis traiter les champs de chacune des fiches. La structure est du type :
repeat with n in every paragraph of ContientF
set Alire to n as text
set AppleScript's text item delimiters to {","}
set Acopier to text item 1 of Alire
set Acoller to text item 2 of Alire
set AppleScript's text item delimiters to {""}
tell application "Finder" to duplicate alias Acopier to alias Acoller
end repeat

Applescript comprend les termes word (lettres entourés d'un espace) et paragraph (ensemble de word entourés d'un return). Justement les fiches sont écrites comme des paragraphes, il suffit donc de prendre chaque paragraphe du fichier pour avoir en faite chaque fiche du fichier.
Chaque champ est sépararé par une virgule, nous le disons à AppleScript par un set AppleScript's text item delimiters to {","}, on peut ainsi mettre n'importe quel caractère comme séparateur de fiche. Il suffit alors de prendre la valeur de chaque champs, ici dans Acopier et dans Acoller.
Ne pas oublier de réinitialiser l' AppleScript's text item delimiters
Pour dupliquer un fichier, la fonction se trouve dans l'application "Finder". Cette fonction duplique un fichier (il faut donner son chemin d'accès complet)dans un endroit (il faut donner l'endroit de la duplication). Le nom reste donc le même, sauf dans le cas ou la duplication à lieu dans le même endroit, la fonction ajoute alors copie 1, copie 2 etc pour chaque nom identique.
Le script est donc du type :
-- Début du script --
set Fich to alias "disque:fichier"
open for access Fich without write permission
set ContientF to read Fichier
close access Fichier
repeat with n in every paragraph of ContientF
set Alire to n as text
set AppleScript's text item delimiters to {","}
set Acopier to text item 1 of Alire
set Acoller to text item 2 of Alire
set AppleScript's text item delimiters to {""}
tell application "Finder" to duplicate alias Acopier to alias Acoller
end repeat
-- Fin du script --