|
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 .
<
Sommaire
|