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
où 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
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 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.
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.