vers l'index général de l'aide

lecture/écriture de données dans un fichier

objectif

Lire et écrire des données dans un simple fichier ASCII, afin de les conserver pour l'image suivante d'une animation, ou pour un rendu ultérieur...

compatibilité

POV-Ray 3.0+sup

syntaxe

format du fichier

Il s'agit d'un fichier ASCII, où une série de valeurs de type décimal, chaîne ou vecteur sont simplement séparées par une virgule.

ouverture d'un fichier

#fopen Identif "nom_du_fichier" read | write | append

Identif est un nom donné au fichier à ouvrir, comme le nom que l'on donne à un objet. Le nom (le vrai) du fichier à ouvrir est suivi de read, write, ou append, qui spécifient si le fichier est destiné à être lu, écrit, ou à recevoir des données supplémentaires.

fermeture d'un fichier

#fclose Identif 

Ferme le fichier désigné par Identif. Si un fichier n'a pas été fermé dans le script, il le sera automatiquement une fois le script complètement interprété.

lecture dans un fichier

#read (Identif,Var1,Var2,Var3...) 

Lit séquentiellement (pas à pas) le contenu du fichier désigné par Identif (qui doit donc avoir été préalablement ouvert), et passe les valeurs successives trouvées dans le fichier vers les variables. Ces variables peuvent avoir été déclarées précédemment ou pas (dans ce cas, le type de variable sera automatiquement détecté).

En cas de tentative de lecture du contenu du fichier au delà des dernières données, le fichier est automatiquement fermé, et son identificateur est inhibé. Cela signifie qu'on peut détecter la fin du fichier à l'aide de la fonction booléenne defined (Identif), qui renverra 0 si le fichier a été fermé.

écriture dans un fichier

#write (Identif,Var1,Var2,Var3...) 

Écrit séquentiellement (pas à pas) les variables spécifiées dans le fichier désigné par Identif. Attention, les virgules de séparation et les guillemets (pour les chaînes) ne sont pas automatiquement générés par #write, et il faudra prendre soin de provoquer leur écriture.

#write (Identif,Var1, "," ,Var2, "," ,Var3, ",") 

Si #fopen a été réglé sur write, le fichier sera complètement écrasé par le nouveau contenu, et si append a été sélectionné, le contenu existant est conservé, et se voit augmenté des nouvelles écritures.

exemple

#declare r1=seed(0);

        //ouverture d'un fichier pour écriture (qui n'a pas besoin de préexister)
#fopen Data1 "data.txt" write

        //écriture de 20 vecteurs aléatoires
#declare I=0;
#while (I < 20) 
  #declare Couleur = <rand(r1),rand(r1),rand(r1)>;
  #write (Data1,Couleur,",")
#declare I=I+1;
#end
        //fermeture du fichier
#fclose Data1

        //ouverture d'un fichier pour lecture
#fopen Data1 "data.txt" read

        //lecture des 20 vecteurs, utilisés comme couleurs
#declare I=0;
#while (I < 20) 
  #read (Data1,Coul_01)
  sphere {<0,0,I>,1 pigment {rgb Coul_01}}
#declare I=I+1;
#end

        //fermeture du fichier
#fclose Data1

camera {location <0,10,-10> look_at <0,0,5>}
light_source {<100,1500,100> rgb <.8,.8,.9>*2 }

rédacteur : Fabien Mosen