Sunteți pe pagina 1din 3

Universit de Valenciennes - La Programmation en Visual Basic par MARLIN B.

Les fichiers sous Visual Basic


I - Petit rappel sur les fichiers
Sous DOS et Win 3.xx les fichiers sont de la forme 8.3 soit 8 caractres pour le nom proprement parler puis un " . " pour une extension facultative pouvant aller jusqu' 3 caractres.
Sous win95 / 98 les noms des fichiers peuvent aller jusqu' 255 caractres (chemin compris), la
rgle de lextension reste inchange. Avec VB, pour ouvrir un fichier, il faut lui allouer un numro
de canal valide, cette opration peut tre gre par le systme grce la commande Freefile dfinie plus loin. Le travail sur fichier, quel quil soit passe par les 3 phases : Ouverture (Open), traitement, fermeture (Close). Cette dernire peut tre faite automatiquement par le systme lors de
la commande End mais il vaut mieux, par soucis de rigueur toujours dcharger un fichier aprs
traitement car aucune action (destruction, rouverture ) nest possible sur un fichier charg ou
un canal encore utilis. Il existe dans Visual Basic 3 types daccs au fichiers. Nous allons les
tudier dans cet ordre : Accs binaire, Accs alatoire et Accs squentiel.

II - Accs binaire
Les fichiers en accs binaire ne sont en fait que de " vulgaires " suites doctets. Le seul point important est que le caractre nul de code ASCII 0 (char(0)) marque la fin dun fichier accs binaire.
Louverture dun fichier en accs binaire :
dim canal as byte
canal = Freefile canal reoit un numro denregistrement valide automatiquement
Open " nom_et_chemin_du_fichier " For Binary as canal
Les instruction Get et Put sont utilises pour lire / crire des donnes. Lemplacement spcifi
marque lemplacement du premier octet de la squence.
Exemple : pour accder aux 64 octets situs aprs le 8me
Dim reponse as String * 32 Dclaration dune variable chane de 32 caractres de longueur
Get canal, 8, reponse Acquisition
Il est important de noter qu'aprs une lecture le curseur de lecture est positionn aprs le dernier
caractre lu. Pour se positionner un emplacement prcis dans le fichier, on peut employer la
commande Seek. Pour changer, nous allons employer la commande Input :
Dim reponse as String*32
Seek canal, 8
Reponse = input (32, canal)
Bien sr, ce mode d'accs ne transmet que des caractres, c'est ensuite vous a donner du sens
ces donnes.

III - Accs alatoire

Un fichier en accs alatoire (appel aussi accs direct ) est compos denregistrements ayant
tous la mme structure (mme suite de mme type dune mme longueur). Pour cela, il faut dfinir un Type personnalis de la faon suivante (de prfrence Gnral Dclarations) :
Private type un_perso
Nom as string * 20
Prnom as String * 15
Age as Integer
Adresse as string * 80
End type

MB Page 1

Universit de Valenciennes - La Programmation en Visual Basic par MARLIN B.

On pourra alors dclarer des variables de type un_perso de la sorte :


Dim perso as un_perso
Dim canal as byte
Canal = Freefile
Open "c:\mesprogs\classe.dat" For Random as canal len = len(perso) 'Ouvre le fichier c:
\mesprogs\classe.dat en accs alatoire avec une longueur d'enregistrement gale la longueur
de la variable
Les Action de lecture/criture se font l aussi grce Get et Put :
Get canal, 5, lve1 'Lit le 5e enregistrement et la place dans lve 1
Put canal, 1, lve1 'Ecrit le contenu de lve 1 en premire position de "classe.dat"
On peut noter que le premier lment d'un fichier porte l'indice 1 et non pas 0. Et en finissant on
ferme grce la commande :
Close canal 'ferme canal
Ou encore Close 'ferme tous les fichiers ouverts. A utiliser avec parcimonie car elle pourrait fermer un fichier que l'on souhaite garder ouvert. Utile dans le Unload du projet pour s'assurer que
tous les fichiers sont bien ferms la sortie du programme

IV - Accs squentiel
Un fichier en accs squentiel permet d'accder des fichers dont la structure est compose de
lignes de texte, toutes finies par le code ASCII retour chariot + saut de ligne soit char(13) + char
(10) en VB.
Soit vbCrlf (constante existante dans VB pour VB Carriage return,
line feed) dans tout ce qui va suivre. Il y a 3 modes d'accs squentiel :
- Input : lecture seule
- Output : accs en criture, un tel accs dtruit le contenu prcdant.
- Append : accs en criture aprs le contenu actuel.
Nous allons faire un petit visualiseur de fichier .ini . Pour cela, on va lire lignes par lignes le fichier
et placer le contenu dans un textbox nomm textini. On lit une ligne grce la commande Line
input. On utilise aussi la commande EOF pour savoir si l'on est arriv la fin du fichier, une lecture au del n'tant pas possible et provoquerait une erreur.
Dim nextline as string
dim canal as byte
Canal = Freefile
Open 'fichier.ini' For Input as #canal
Do until EOF(canal)
Line Input #canal, nextline
textini.text = textini.text + nextline + vbcrlf
Loop
Close canal
On pourra alors rcuprer le contenu de la ligne, connaissant la structure d'un fichier ini :
[Rubrique]
mot_clef=valeur
Grce une fonction utilisateur :
Function lectureINI(rubr As String, motclef As String) As String
Dim pos1, pos2, pos3
canal = FreeFile

MB Page 2

Universit de Valenciennes - La Programmation en Visual Basic par MARLIN B.


Open "fichier.ini" For Input As canal
Do Until EOF(canal)
Line Input #canal, nextline
inivar = inivar + nextline + vbCRLF
Loop
Close canal
lectureINI = vbNullstring
rubr = "[" + rubr + "]"
pos1 = InStr(1, inivar, rubr) + Len(rubr) + 2
motclef = motclef + "="
pos2 = InStr(pos1, inivar, motclef) + Len(motclef) 'position du dbut de la rponse
pos3 = InStr(pos2, inivar, Chr(13)) 'position de la fin de la rponse
lectureINI = Mid(inivar, pos2, pos3 - pos2)
End Function
Qui s'utilise de la faon suivante :
valeur = lectureNI("rubrique", "Motclef")
On pourra ainsi crire et modifier un fichier ini :
Function (ou sub) EcritureINI(rubr As String, motclef As String, param As string)
dim canal as byte
canal8 = FreeFile
Open "fichier.ini" For Input As canal8
Do Until EOF(canal8)
Line Input #canal8, nextline
inivar = inivar + nextline + vbCRLF
Loop
Close canal
rubr = "[" + rubr + "]"
pos1 = InStr(1, inivar, rubr) + Len(rubr) + 2
motclef= motclef + "="
pos2 = InStr(pos1, inivar, motclef) + Len( motclef)
pos3 = InStr(pos2, inivar, Chr(13))
inivar = Left(inivar, pos2 - 1) + param + Mid(inivar, pos3)
Close
canal = FreeFile
Open "fichier.ini" For Output As canal
Print #canal, inivar
Close canal
End Function
Le dbut reprend lectureINI. Celle l s'utilise de la faon suivante :
Newini = EcritureINI
("rubrique", "mot_clef", nouvelle valeur de typer chaine, ou str(valeur non chaine))
V - Petit complment sur les fichiers sous VB
Voici diverses commandes qui vous seront trs utiles pour peu que vous vouliez travailler avec
des fichiers :
- Filelen("nom et chemin du fichier cible") renvoie la taille du fichier spcifi.
- Filecopy source, cible copie le fichier source en cible.
- Kill ("nom et chemin du fichier cible") dtruit le fichier cible qui doit tre ferm, faites prcder de
close)
Ajouter shared dans la commande open permet de partager l'accs au fichier avec d'autres procdures de l'application. Peut tre utile dans certains cas.

MB Page 3

S-ar putea să vă placă și