Les fichier structurés en Visual Basic

(Version projecteur)


Ouverture et fermeture

L'ouverture d'un fichier structuré en Visual Basic, se fait par l'instruction suivante:

Open  nom du fichier  For Random As numéro Len = T

T désigne la taille d'un enregistrement exprimée en octets.

Notez que l'on ne précise pas si on ouvre le fichier en lecture ou en écriture.

Si on le la connait pas T, on peut utiliser la fonction Len qui retourne la taille d'un objet Visual Basic.

Prenons par exemple un fichier d'enregistrements de type Livre défini comme suit:

 Type Livre
    Titre As String * 100
     Auteur As String * 30
     AnneePublication As Integer
 End Type  

La déclaration String * est une variante de String qui permet de fixer la taille d'une chaine de caractères. Il est nécessaire d'utiliser ce type de déclaration pour les fichiers structurés, car un enregistrement doit être un objet de taille fixe.

Pour pouvoir retrouver la taille d'un enregistrement, on déclare une variable de ce type:

Dim UnLivre As Livre

On peut ensuite créer un fichier structuré de type Livre, comme suit:

Open  "Bibliotheque.dat"  For Random As 1 Len = Len(UnLivre)

La fermeture, se fait de la même manière qu'avec les fichiers texte, en utilisant l'instruction Close, suivie du numéro du fichier. Par exemple, pour fermer le fichier précédent, on écrira:

Close 1

Ecriture séquentielle

Pour écrire un enregistrement à la suite du dernier enregistrement lu ou écrit:

 Put numéro du fichier, , enregistrement

Le premier Put après l'ouverture du fichier se fera automatiquement au début du fichier.

Exemple:

Déclarons deux structures de type Livre:

 Dim VB As Livre 
 Dim Gaston As Livre

Donnons des valeurs à leurs champs:

 VB.Titre="Visual Basic 6, Le guide du programmeur"
 VB.Auteur="Frantz"
 VB.AnneePublication=2000
 Gaston.Titre="Gaston Lagaffe - Des Gaffes et des Dégats"
 Gaston.Auteur="Franquin"
 Gaston.AnneePublication=1975 

Après les instructions suivantes:

Open  "Bibliotheque.dat"  For Random As 1 Len = Len(UnLivre)
Put 1,, Gaston
Put 1,, VB

Le fichier "Bibliotheque.dat" contiendra deux enregistrements de type Livre. Plus précisément, le premier enregistrement contiendra le livre Gaston et le deuxième, le livre VB.

Si après cela on fait encore une fois

Put 1,, Gaston

le fichier contiendra trois enregistrement (Gaston,VB,Gaston).

Supposons à présent, que l'on ouvre à nouveau le fichier:

Open  "Bibliotheque.dat"  For Random As 1 Len = Len(UnLivre)

Puis que l'on fasse:

Put 1,, VB

Alors le fichier contiendra (VB,VB,Gaston).

Contrairement à ce que l'on pourrait penser (surtout lorsque l'on est habitué à la manipulation de fichier texte), l'ouverture d'un fichier structuré ne provoque jamais la perte des données.



Lecture séquentielle

Lecture d'un enregistrement à la suite du dernier enregistrement lu ou écrit:

 Get numéro du fichier, , enregistrement

Le premier Get après l'ouverture du fichier lit le premier enregistrement.

Exemple:

Nous reprenons la suite de l'exemple précédent. Notre fichier Bibliotheque.dat contient à présent trois enregistrements de type Livre (VB,VB, Gaston).

Pour les récupérer, déclarons trois variables de type Livre:

Dim Livre1 As Livre
Dim Livre2 As Livre
Dim Livre3 As Livre

après les instructions suivantes

Open  "Bibliotheque.dat"  For Random As 1 Len = Len(UnLivre)
Get 1,, Livre1
Get 1,, Livre2
Get 1,, Livre3

les structures Livre1 et Livre2 contiendront le livre VB et Livre3 contiendra le livre Gaston.

Lecture jusqu'en fin de fichier

De manière générale, on ne connait pas le nombre d'enregistrements contenus dans un fichier structurés. On utilise alors la fonction EOF pour savoir si on est arrivé à la fin du fichier:


Dim s As Type

Open  nom du fichier  For Random As numéro Len = Len(Type)

While Not EOF (numéro)
   Get numéro, , s
   Traitement de la structure s
Wend

Voici par exemple, comment charger le fichier Bibliotheque.dat dans un tableau de livres:


Dim NLivre As Integer
Dim UnLivre As Livre
Dim Bibliotheque (1 To MAXLIVRE) As Livre

Open  "Bibliotheque.dat"  For Random As 1 Len = Len(UnLivre)

NLivre=0
While Not EOF (1)
   Get 1, , UnLivre
   NLivre = NLivre + 1
   Bibliotheque(i)=UnLivre
Wend

En supposant que notre fichier Bibliotheque.dat contient toujours les trois livres (VB,VB,Gaston), l'exécution de ce code chargera le livre VB dans Bibliotheque(1) et Bibliotheque(2), puis le livre Gaston dans Bibliotheque(3). De plus, la variable NLivre contiendra le nombre de livres de la bibliothèque (ici 3) à la sortie de la boucle.