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). |
|