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)

Bool fDelete(string name)



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;



fopen


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;




fclose


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



fwrite


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;



fread


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;



eof


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;



ftell


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)




fsize


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;



fseek


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