|
Utiliser FileIO
L'Xtra FileIO est apparue après la sortie de la
version 5 de Director pour remplacer avantageusement l'Xobjet
FileIO. Elle remplit toujours la même fonction : écrire
et lire depuis un script Lingo, un fichier texte enregistré
sur le disque dur de l'utilisateur. La mise en oeuvre de
l'Xtra est la même sur Mac comme sur PC.
Nous vous proposons ci-après de mettre en uvre
l'Xtra depuis la fenêtre message de Director attendu
que toutes les commandes utilisées ici (sauf showXlib)
sont utilisables dans un script habituel.
Les manipulations qui suivent supposent que l'Xtra FileIO
se trouve dans le dossier Xtras au démarrage de Director.
Commençons par enregistrer l'animation actuelle sur
le bureau du mac (ou celui de windows) ce qui nous permettra
de voir les fichiers que nous allons manipuler.
On ouvre la fenêtre message et l'on s'enquiert des
Xtras et Xobjets disponibles par la commande Lingo ShowXlib.
Le réponse est très laconique. Jugez-en plutôt :
showXlib
-- XLibraries:
-- Xtra: QTVRXtra
-- Xtra: ScriptColor
-- Xtra: PrintOMatic_Lite
-- Xtra: NetLingo
-- Xtra: Mui
-- Xtra: fileio
-- "*Standard.xlib"
-- XObject: SerialPort Id:200
-- XObject: XCMDGlue Id:2020
Le contenu de cette liste peut varier mais sa structure
est toujours la même : D'abord les Xtras (sous le
titre XLibrairies) puis viennent les Xobjets et autres (sous
le titre Standard.xlib). Pour info, XCMDGlue est un xobjet
intégré à Director qui permet d'utiliser
les fragments de code ( XCMDs, XFCNs) destinés initialement
à Hypercard, (sur PC, on rencontrera DLLGlue
qui joue ce même rôle d'intermédiaire
à l'usage des librairies liées dynamiques
DLL). On a ici avec SerialPort deux ressources XCODs intégrées
à Director et non pas des XObjets externes.
Director 7 n'accepte que les Xtras.
Pour apparaître dans cette liste, les xtras Lingo
doivent être placés dans le dossier Xtras au
lancement de l'application ou bien encore être ouvertes
ponctuellement par la commande openXlib.
Les Xobjets doivent être appelés par openXlib.
Les XCMDs et XFCNs doivent être ouvertes par openXlib.
L'xobjet intégré XCMDGlue se chargeant de
gérer dansDirector l'utilisation des ces commandes
externes destinées en fait à enrichir Hypercard.
Placé dans le dossier Xtras de Director, FileIO immédiatement
disponible , nous pouvons lui demander son mode d'emploi
par la commande Lingo mMessagelist qui retourne les méthodes
de l'Xtra :
mMessagelist(xtra "fileio")
Et, pour en obtenir l'affichage :
put the result
Le résultat de cette demande d'explication est on
ne peut plus clair ! ;-)
-- "xtra fileio
-- CH 18apr97
new object me
-- create a new child instance
fileName object me
-- return fileName string of the open file
status object me
-- return the error code of the last method called
error object me, int error
-- return the error string of the error
setFilterMask object me, string mask
-- set the filter mask for dialogs
openFile object me, string fileName, int mode
-- opens named file. valid modes: 0=r/w 1=r 2=w closeFile
object me
-- close the file display
Open object me
-- displays an open dialog and returns the selected fileName
to lingo
displaySave object me, string title, string defaultFileName
-- displays save dialog and returns selected fileName to
lingo
createFile object me, string fileName
-- creates a new file called fileName
setPosition object me, int position
-- set the file position
getPosition object me
-- get the file position
getLength object me
-- get the length of the open file
writeChar object me, string theChar
-- write a single character (by ASCII code) to the file
writeString object me, string theString
-- write a null-terminated string to the file
readChar object me
-- read the next character of the file and return it as
an ASCII code value
readLine object me
-- read the next line of the file (including the next RETURN)
and return as a string
readFile object me
-- read from current position to EOF and return as a string
readWord object me
-- read the next word of the file and return it as a string
readToken object me, string skip, string break
-- read the next token and return it as a string
getFinderInfo object me
-- get the finder info for the open file (Mac Only)
setFinderInfo object me, string attributes
-- set the finder info for the open file (Mac Only)
delete object me
-- deletes the open file
+ version xtraRef
-- display fileIO version and build information in the message
window
* getOSDirectory
-- returns the full path to the Mac System Folder or Windows
Directory "
Ce poème est constitué de l'ensemble des fonctions
offertes. Certaines de ces fonctions (appelées méthodes
globales) peuvent être invoquées directement
:
getosdirectory
put the result
-- "The eight ball:Dossier Système:"
D'autres exigent que l'Xtra elle-même leur soit passée
en argument (les "méthodes de classe" héritée
à l'Xtra de Director et précédées
par un +). D'autres enfin imposent la création d'une
instance de l'Xtra.
On commence donc par appeler une méthode permettant
la création d'une instance, un enfant de l'Xtra.
Le résultat de l'instanciation sera stocké
dans la variable CRAPO. CRAPO sera donc le nom de l'enfant
à naître (rappel : toute variable créée
dans la fenêtre message est globale).
set CRAPO to new(xtra "fileio")
Les fautes de frappes sont trop faciles, aussi à intervalle
régulier nous nous soucierons de savoir si tout c'est
bien passé
la fonction Status() retourne un numéro d'erreur
pour la dernière opération commandée
à l'enfant. Mais que ferions nous d'un numéro
dont la signification nous est inconnue ?
La fonction error() qui prend deux arguments : l'enfant
et un numéro d'erreur, va effectuer la nécessaire
traduction :
put error(CRAPO,status(CRAPO))
-- "OK"
La réponse est claire. Tout s'est bien passé.
Nous pouvons continuer et demander à CRAPO de
créer un fichier sur le bureau du mac :
createFile(CRAPO,"the eight ball:desktop folder:monfichier")
Après quelques instants, le fichier apparaît
sur le bureau avec une icône indéterminée.
Sur un mac, un fichier possède un type et un créateur
(quatre caractères à chaque fois). Ce
sont ces infos qui permettent au Finder d'afficher la bonne
icône sur le bureau et de lancer la bonne application
le cas échéant si l'on double-clique sur l'icône.
Dans le cas présent nous allons créer un fichier
de type texte et l'associer à TeachText :
setFinderInfo(CRAPO,"TEXT ttxt")
D'autres possibilités s'offraient à nous
: "ttro ttxt" permettait la création d'un fichier
texte verrouillé comme on en voit sur les CD des
magazines, "pref CrPo" associait au fichier l'icône
d'un fichier de préférences et lui donnait
CrPo (?) comme créateur...
Continuons. Il convient bien-sûr d'ouvrir ce fichier
pour nous le rendre accessible. Nous choisissons de l'ouvrir
en lecture/écriture : on passe l'argument zéro.
openFile(CRAPO,"Macintosh HD:desktop folder:monfichier",0)
Le fichier est ouvert si le nom et le chemin sont corrects.
Dans la pratique on testera le résultat de l'instruction
par la fonction status() voir plus haut.
Les habitués des Xobjets auront décelé
la nuance : L'objet est passé à la méthode
comme argument et non pas la méthode à l'objet
comme jadis. Pour les autres il suffira de se souvenir que
l'objet fait le premier argument de toutes les fonctions.
exemple :
writeString(CRAPO,"BONJOUR A TOUS !")
Notre fichier "monfichier" contient désormais la
chaîne de caractères souhaitée. mais
avant de le fermer pour aller l'ouvrir avec un éditeur
quelconque, une remarque :
La position courante à l'intérieur du
fichier détermine la position des caractères
lus ou ajoutés. Pour toute manipulation du texte
du fichier à l'aide de l'Xtra, il convient de
s'enquérir de cette position courante :
getPosition(CRAPO)
put the result
-- 14
Nous sommes à la fin de la chaîne. impossible
de lire un quelconque caractère sans revenir en arrière
:
setPosition(CRAPO,3)
Dès lors :
readChar(CRAPO)
put the result
-- "J"
C'est le suivant qui est lu ! Et si l'on insiste : le suivant
toujours. On doit donc savoir revenir au début d'une
chaîne par setPosition(CRAPO,0) mais également
à la fin de celle-ci. Pour savoir où
la chaîne finit :
getLength(CRAPO)
put the result
-- 14
Pour se placer à la fin donc c'est très
facile :
setPosition(CRAPO,getLengh(CRAPO))
writestring(CRAPO," Le CrapoWeb vous salue !")
Enfin, L'ON N'OUBLIERA JAMAIS de fermer un fichier ouvert,
closeFile(CRAPO)
Ni non plus de supprimer l'instance (mais plus en lui passant
mDispose ! C'est un Xtra vous dit-on !) :
set CRAPO to 0
Il vous est désormais possible d'ouvrir le fichier,
s'il est de type TEXT, depuis le Finder à l'aide
de n'importe quel éditeur pour lire son contenu.
Mais peut-être préférerez-vous l'ouvrir
depuis votre script. Auquel cas il vous faut recréer
une instance de FileIO :
set UNOBJET to new(xtra "fileio")
openfile(UNOBJET, "the eight ball:desktop folder:monfichier",
0)
put error(UNOBJET,status(UNOBJET))
-- "OK"
Si vous souhaitez lire le contenu du fichier ainsi ouvert,
pensez bien à vous placer au début du
fichier !
Mais nous vous proposons un jeu plus dangereux :
delete(UNOBJET)
Il n'y a plus de fichier et aucune demande de confirmation
!
Enfin il convient de disposer de l'objet pour nettoyer la
mémoire :
set UNOBJET to 0
La dernière version de l'Xtra FileIO peut être
téléchargée
sur le
site de macromedia .
|
|