VBplus - www.vbasic.org

Sommaire / Notre équipe / Nouveautés / Bulletins
Apprendre & Progresser / Aider & Etre aidé

 
VBguides

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 caractères pour le nom à proprement parler puis un " . " pour une extension facultative pouvant aller jusqu'à 3 caractères.
  • Sous win95 / 98 les noms des fichiers peuvent aller jusqu'à 255 caractères (chemin compris), la règle de l’extension reste inchangée.
  • Avec VB, pour ouvrir un fichier, il faut lui allouer un numéro de canal valide, cette opération peut être gérée par le système grâce à la commande Freefile définie plus loin.
  • Le travail sur fichier, quel qu’il soit passe par les 3 phases : Ouverture (Open), traitement, fermeture (Close). Cette dernière peut être faite automatiquement par le système lors de la commande End mais il vaut mieux, par soucis de rigueur toujours décharger un fichier après traitement car aucune action (destruction, réouverture …) n’est possible sur un fichier chargé ou un canal encore utilisé.
  • Il existe dans Visual Basic 3 types d’accès au fichiers. Nous allons les étudier dans cet ordre : Accès binaire, Accès aléatoire et Accès séquentiel.


II - Accès binaire

Les fichiers en accès binaire ne sont en fait que de " vulgaires " suites d’octets. Le seul point important est que le caractère nul de code ASCII 0 (char(0)) marque la fin d’un fichier accès binaire.

L’ouverture d’un fichier en accès binaire :

dim canal as byte
canal = Freefile
‘canal reçoit un numéro d’enregistrement valide automatiquement
Open " nom_et_chemin_du_fichier " For Binary as canal

Les instruction Get et Put sont utilisées pour lire / écrire des données. L’emplacement spécifié marque l’emplacement du premier octet de la séquence. Exemple : pour accéder aux 64 octets situé après le 8ème

Dim reponse as String * 32 ‘Déclaration d’une variable chaîne de caractère de 32 caractères de longueur
Get canal, 8, reponse‘Acquisition

Il est important de noter qu'apès une lecture le curseur de lecture est positionné après le dernier caractère lu.

Pour se positionner à un emplacement précis dans le fichier, on peu emplyer la commande Seek. Pour changer, nous allons employer la commande Input :

Dim reponse as String*32
Seek canal, 8
Reponse = input (32, canal)

Bien sûr, ce mode d'accès ne transmet que des caractères, c'est ensuite à vous a donner du sens à ces données.


III - Accès aléatoire

Un fichier en accès aléatoire (appelé aussi accès direct ) est composé d’enregistrements ayant tous la même structure (même suite de même type d’une même longueur).

Pour cela, il faut définir un Type personnalisé de la façon suivante (de préférence à Général à Déclarations) :

Private type un_perso

Nom as string * 20
 Prénom as String * 15
 Age as Integer
 Adresse as string * 80
End type

On pourra alors déclarer 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 accès aléatoire avec une longueur d'enregistrement égale à la longueur de la variable

 

Les Action de lecture/écriture se font là aussi grâce à Get et Put :

Get canal, 5, élève1 'Lit le 5ème enregistrement et la place dans élève1
Put canal, 1, élève1 'Ecrit le contenu de élève1 en première position de "classe.dat"

On peut noter que le premier élément d'un fichier porte l'indice 1 et non pas 0.

Et en finissant on ferme grâce à la commande :

Close canal 'ferme canal

Ou envcore

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 fichier sont bien fermés à la sortie du programme


IV - Accès séquentiel

Un fichier en accès séquentiel permet d'accéder à des ficher dont la structure est composée de lignes de texte, toutes fini 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'accès séquentiel :

_Input : lecture seule

_Output : accès en écriture, un tel accès détruit le contenu précédant.

_Append : accès en écriture après le contenu actuel.

Nous allons faire un petit visualisateur de fichier .ini . Pour cela, on va lire lignes par lignes le ficheir et palcer le contenu dans un textbox nommé textini. On lit une ligne grâce à 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 récupérer le contenu de la ligne, connaissant la structure d'un fichier ini :

[Rubrique]

mot_clef=valeur

Grâce à une fonction utilisateur :

Function lectureINI(rubr As String, motclef As String) As String

Dim pos1, pos2, pos3
canal = FreeFile
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 début de la réponse
pos3 = InStr(pos2, inivar, Chr(13)) 'position de la fin de la réponse
lectureINI = Mid(inivar, pos2, pos3 - pos2)
End Function

Qui s'utilise de la façon 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 début reprend lectureINI. Celle là s'utilise de la façon suivante :

Newini = EcritureINI ("rubrique", "mot_clef", nouvelle valeur de typer chaine, ou str(valeur non chaine))


V - Petit complément sur les fichiers sous VB

Voici diverses commandes qui vous seront très utiles pour peu que vous vouliez travailler avec des fichiers :

Filelen("nom et chemin du fichier cible") renvoie la taille du fichier spécifié.

Filecopy source, cible copie le fichier source en cible.

Kill("nom et chemin du fichier cible") détruit le fichier cible (il doit être fermé, faites précéder de Close)

Ajouter shared dans la commande open permet de partager l'accès au fichier avec d'autres procédure de l'application. Peut être utile dans certains cas.

 

Fiche technique écrite par Kyle Katarn .
Pour un exemple des capacités des accès aux fichiers, venez télécharger mon soft Neti qui utilise les 2 accès principaux (séquentiels et aléatoires).

 

Contacter le webmaster
Copyright © 1999 VBplus  -  Tous Droits Réservés  -  Reproduction Interdite

 Digiweb France - Web Presence Provider