|
|
|
|
|
|
||
3DVL Motion Inspector script Bibliothèque interne |
|||
|
|
|
|
|
|
|
|
Bool fCopy(string oldname, string newname)
Bool fMove(string oldname, string newname)
Bool fRename(string oldname, string newname)
Description
Ces quatre fonctions permettent respectivement de i) copier, ii) déplacer, iii) renommer et iv) détruire un fichier existant. Le paramètre « oldname » est une chaîne de caractères représentant le nom complet du fichier (nom et emplacement, par exemple « c:\tmp\testO1.txt »). Le deuxième paramètre « newname » représente le nom du nouveau fichier (dans le cas de la copie, du déplacement ou pour renomer le fichier). Ce nom doit être valide, c’est à dire que l’emplacement spécifier dans le nom (répertoire) doit exister.
En cas d’échec, cette fonction revoie false (et en cas de succès elle revoie la valeur true).
Exemple :
Procedure Main()
var ok1 := fcopy("c:\tmp\test.3dl", "c:\tmp\test2.3dl");
if ok1 then
var ok2 := fmove("c:\tmp\test2.3dl", "c:\test3.3dl");
if ok2 then
var ok3 := frename("c:\test3.3dl", "c:\test4.3dl");
if ok3 then
var ok4 := fdelete("c:\test4.3dl");
if ok4 then
Message("Destruction de test4");
else
Message("Erreur de destruction de test4");
end;
else
Message("Erreur de changement de nom pour test4");
end;
else
Message("Erreur de déplacement du fichier test3");
end;
else
Message("Erreur de création du fichier test2");
end;
End;
Usage
long fopen(String filename, String mode)
Description
Cette fonction ouvre un fichier disque portant le nom “ filename ” suivant le mode préciser dans la chaine “ mode ” :
Cette chaîne peut avoir les valeurs suivantes :
r Ouverture en lecture seule
w Ouverture en écriture (efface le contenu si un fichier existe)
a ouverture en écriture ( à la fin du fichier : append)
r+ Ouverture en lecture et écriture pour une mise à jour
w+ Création d’un fichier et ouverture en lecture et écriture.
Ces valeurs peuvent se combiner avec deux autres caractères :
b fichier binaire
t fichier texte.
Par exemple, pour créer un fichier texte, il faut utiliser le mode ‘wt’
Valeur renvoyée
Cette fonction renvoie un nombre positif ou nul correspondant à un numéro d’ordre du fichier. Ce numéro (ou handle) sera nécessaire pour utiliser les fonctions de lecture (fread) et d’écriture(fwrite).
En cas d’échec, la valeur renvoyée est égale à -1.
Exemple :
Const NB := 100;
Procedure Main()
var data := fVector(NB);
var i;
for(i:= 0; i < NB; i++)
Data[i] := 10*sin(float(i)/(float(NB)/4.0)*3.14256);
end;
var file := fopen("test.txt", "wt");
if (file <> - 1) then
for(i:=0; i < NB; i++)
var msg;
msg := str(i) + chr(9) + str(Data[i]) + endl;
fWrite(file, msg, ‘char’);
end;
fclose(file);
end;
End;
Usage
fclose(long handle)
Description
Ferme un fichier disque.
Ce fichier n’est plus accessible par le numéro d’ordre (handle).
Les buffers systèmes associés au fichier sont libérés.
N.B. Lors de la fin du programme, si un fichier est resté ouvert (pas d’appel à fclose), celui-ci est automatiquement fermé.
Usage
long fwrite(long handle, variant x, String format)
Description :
Cette function écrit dans le fichier ayant le numéro d’ordre “ handle ”, la variable “ x ” suivant le format “ format ”. Ce format de données est à choisir dans la liste suivante :
char : caractère
int8 : entier sur 8 bits (+- 128)
uint8 : entier non signe sur 8 bit (0 a 255)
int16 : entier 16 bits
uint16 : entier non signé 16 bits
int32 : entier 32 bits (entier Long 3DVL)
uint32 : entier 32 bits non signé
float32 : flottant IEEE 32 bits
float64 : flottant IEEE 64 bits (flottant 3DVL)
Si la format est une chaine vide "", la variable est enregistrée suivant un format automatique :
Chaine de caractères : char
Nombre entier (y compris les vecteurs) : int32
Nombre réels (y compris les vecteurs) : float64
Les chaînes de caractères sont TOUJOURS enregistrées comme une suite de caractère char.
Cette commande s’applique à toutes les variables 3DVL : nombres, chaînes de caractères, vecteurs, arrays. Dans le cas des vecteurs et des Arrays, chaques éléments du tableau est stocké suivant le format précisé.
Cette fonction renvoie le nombre d’octet réellement enregistré dans le fichier.
Exemple 1 : format automatique Binaire et Texte
Procedure CreateBinFile(name)
var data := fVector(100); // création du vecteur de données
var i;
for(i:= 0; i < 100; i++)
Data[i] := 10*sin(float(i)/(float(100)/4.0)*3.14256);
end;
var file := fopen(name, "wb"); //ouverture en écriture 'w' et binaire 'b'
if (file <> - 1) then // test si ok
for(i:=0; i < 100; i++) // ecrire les données cad deux colonnes
var msg;
fWrite(file, i+1, ""); // le numéro
fwrite(file, Data[i], ""); // les données
end;
fclose(file);
end;
end;
Procedure CreateTextFile(name)
var data := fVector(100); // création du vecteur de données
var i;
for(i:= 0; i < 100; i++)
Data[i] := 10*sin(float(i)/(float(100)/4.0)*3.14256);
end;
var file := fopen(name, "wt"); //ouverture en écriture 'w' et texte
if (file <> - 1) then // test si ok
for(i:=0; i < 100; i++) // ecrire les données cad deux colonnes
var msg;
msg := str(i+1) + chr(9) + str(Data[i]) + endl;
fWrite(file, msg, "");
end;
fclose(file);
end;
end;
Exemple 2 : Ecriture d’un fichier TRT
Const NbPoints := 1000;
Procedure Main()
var FileName := "Test.trt";
var Col1 := FVector(NbPoints);
var Col2 := FVector(NbPoints);
var i;
for(i:= 0; i < NbPoints; i++) // génération de valeurs quelconques
Col1[i] := 10+sin(i/100.0*3.14)+random(10)/10.0;
Col2[i] := 5+cos(i/200.0*3.14+0.6)+ Col1[i];
end;
var file := fopen(FileName, "wb"); // création du fichier
// Ecriture de l'entête du fichier
var Hd;
Hd := "Fichier de Donn"+chr(130)+"es TRT"+chr(26);
fwrite(file, Hd, 'char');
fwrite(file, NbPoints, 'int32'); // Nb de points
fwrite(file, 2, 'uint8'); // Nb de colonnes
fwrite(file, 200.0, 'float32'); // Fréquence d'échantillonnage
fwrite(file, 0, 'int32'); // Top synchro
fwrite(file, 0, 'int32'); // premier point valide
fwrite(file, NbPoints, 'int32'); // dernier point valide
fwrite(file, 1, 'uint8'); // premiere colonne valide
fwrite(file, 2, 'uint8'); // dernière colonne valide
fwrite(file, 100.0, 'float32'); // Fréquence de coupure
// Ecriture des données Col1, col2
for(i:= 0; i < Nbpoints; i++)
fwrite(file, Col1[i], 'float32');
fwrite(file, Col2[i], 'float32');
end;
fclose(file);
End;
Usage
variant fread(long handle, string type)
Description
Cette fonction permet de lire une données à partir d’un fichier déjà ouvert et possédant un numéro d’ordre “ handle ”. Cette données à lire est du type déterminé par la chaîne “ type ”
types disponibles :
char : caractère
int8 : entier sur 8 bits (+- 128)
uint8 : entier non signe sur 8 bit (0 a 255)
int16 : entier 16 bits
uint16 : entier non signé 16 bits
int32 : entier 32 bits (entier Long 3DVL)
uint32 : entier 32 bits non signé
float32 : flottant IEEE 32 bits
float64 : flottant IEEE 64 bits (flottant 3DVL)
real6 : flottant 48 bits (spécifique Pascal), uniquement en lecture
sgifloat : flottant 32 bits SGI - uniquement en lecture
sgiInt : entier 16 bits SGI - uniquement en lecture
sgiLong : entier 32 bits SGI - uniquement en lecture
decfloat : flottant 32 bits DEC - uniquement en lecture
Afin de lire plus facilement les fichier texte, deux types de variables ont été ajoutés
string : provoque la lecture d’un mot (chaîne de caractères). Un mot est délimité par des caractères non imprimables (espace, tabulation etc.)
line : provoque la lecture d’une ligne entière. Une ligne est délimitée par un (ou 2) séparateur de fin de ligne (caractère ASCII 10 et/ou 13).
C’est deux types ne sont actifs qu’en lecture
Il est ainsi possible de lire pratiquement tous les fichiers texte et binaire.
Valeur renvoyée
Cette fonction renvoie une chaîne de caractère, un entier ou un flottant en fonction du type.
En cas d’échec, renvoie NIL
Exemple 1 :
Procedure ReadBinFile(name)
var file := fopen(name, "rb"); // ouverture en lecture 'r' et binaire 'b'
if file <> -1 then // test si le fichier existe
while !Eof(file) do // test si fin de fichier
var n := fread(file, 'int32'); // lecture du numéro entier long
var value := fread(file, 'float64'); // lecture de la valeur double
print n, chr(9), value, endl; // affichage
end;
fclose(file);// ne pas oublier de fermer le fichier
else
Message("Impossible de lire le fichier");
end;
end;
Procedure ReadTextFile(name)
var file := fopen(name, "rt"); // ouverture en lecture 'r' et texte 't'
if file <> -1 then // test si le fichier existe
while !Eof(file) do // test si fin de fichier
var c := fread(file, 'char'); // lecture de caractère
print c; // affichage
end;
fclose(file); // ne pas oublier de fermer le fichier
else
Message("Impossible de lire le fichier");
end;
end;
Exemple 2 : Lecture d’un fichier texte
Procedure ReadString(fileName)
// Lecture de chaque mot du fichier texte
var File := FOpen(FileName, "rt");
if (File <> -1) then
var i;
for (i:= 0; i < 3; i++) // Lire les trois premiers mots du fichiers
var word := FRead(File, 'string');
print "Mot numéro ", i+1, " ", word, endl;
end;
FClose(File);
else
Message("Erreur d'ouverture du fichier "+FileName);
end;
Print endl;
end;
Procedure ReadLine(fileName)
var File := FOpen(FileName, "rt"); // Ouverture en mode texte
if (File <> -1) then
var count := 0;
while !Eof(File) do // Lire tant que l'on a pas atteint la fin
var line := FRead(File, 'line'); // Lire une ligne
print "Ligne N° ", count+1, " ", line, endl;
count++;
end;
FClose(File);
else
Message("Erreur d'ouverture du fichier "+FileName);
end;
Print endl;
end;
Usage
bool eof(long handle)
Description
Vérifie si le pointeur de fichier est à la fin du fichier
Renvoie true si la fin du fichier est atteint.
Exemple :
Procedure ReadTextFile(name)
var file := fopen(name, "rt"); // ouverture en lecture 'r' et texte 't'
if file <> -1 then // test si le fichier existe
while !Eof(file) do // test si fin de fichier
var c := fread(file, 'char'); // lecture de caractère
print c; // affichage
end;
fclose(file);
else
Message("Impossible de lire le fichier");
end;
end;
Usage
ftell(long handle)
Description
Retourne la position du pointeur de fichier.
Cette fonction renvoie une valeur en octet (offset) mesurée à partir du début du fichier, de la position courante.
C’est cette position courante qui est utilisée lors des opérations d’écritureFWRITE ou de lectureFREAD.
Ces deux opérations modifient cette position courante (incrément correstpondant qu nombre d’octets lus/enregistrés)
Usage
long fsize(long handle)
Description
Renvoie la taille en octet, d’un fichier possédant le numéro d’ordre “ handle ”
Exemple
Function GetFileSize2(name)
var si := 0;
var file := fopen(name, "r"); // ouverture du fichier
si := fsize(file);
fclose(file);
return si;
end;
Procedure Main()
var FileName := GetFileName("Fichier C3D|*.c3d");
if (!Empty(FileName)) then
var size := GetFileSize2(FileName);
var Msg := FileName;
Msg := Msg + " : Taille = "+str(size) + " Octets";
Message(msg);
end;
End;
Usage
long fseek(long file, long offset, String whence)
Description
Cette commande permet de positionner le pointeur de fichier à un endroit quelconque de celui-ci. Toutes les opérations d’entrée/sortie sur les fichiers se font à partir de cette position courante.
Déplace le pointeur du fichier “ file ”, c’est à dire la position courante, par un déplacement en octet “ offset ”. Le paramètre “ whence ” permet de préciser l’origine du déplacement :
‘bof’ début de fichier
‘cof’ Position courante
‘eof’ Fin de fichier
fseek renvoie la valeur 0 en cas de succès.
Exemple
Function GetFileSize(name)
var si := 0;
var file := fopen(name, "r"); // ouverture du fichier
var curpos := ftell(file); // position actuelle
fseek(file, 0,'eof'); // on se déplace aà la fin
si := ftell(file); // position = taille;
fseek(file, curpos, 'cof');
fclose(file);
return si;
end;
Procedure Main()
var FileName := GetFileName("Fichier C3D|*.c3d");
if (!Empty(FileName)) then
var size := GetFileSize(FileName);
var Msg := FileName;
Msg := Msg + " : Taille = "+str(size) + " Octets";
Message(msg);
end;
End