Upload
ines-caron
View
122
Download
4
Embed Size (px)
Citation preview
Cours VB 2007/2008 1
Chapitre 4
Manipulation des fichiersdans le langage VB
2 Cours VB – ISG 2007/2008
Plan
Fichiers en VB
Types de fichiers en VB: séquentiels (Textes) à accès direct
Random Binary
Différentes opérations de gestion de répertoires et de fichiers en VB
3 Cours VB – ISG 2007/2008
Introduction
Un fichier est un ensemble de données qui sert soit:
à la lecture : pour rentrer des informations dans un programme;
à l’écriture : pour sauvegarder les résultatsobtenus.
Les fichiers sont caractérisés par deux notions : le mode d’organisation : comment sont
organisées les données dans le fichier (par enregistrement, en bloc…)
le mode d’accès : comment sont accédées les données dans le fichier (séquentiel, direct).
Ces caractéristiques influencent l’utilisation des fichiers selon les langages de programmation.
La combinaison de ces derniers offre différents types de fichiers.
L’utilisation d’un fichier se fait toujours selon les phases suivantes :
Ouverture du fichier Traitement Fermeture du fichier
4 Cours VB – ISG 2007/2008
I. Les fichiers en VB
VB gère : Les fichiers séquentiels Les fichiers à accès direct
Les noms de fichiers obéissent aux règles du DOS : La longueur est limitée à 8 caractères maximum et une extension de 3 caractères au maximum.
L’instruction Open est employée pour ouvrir un fichier, sa syntaxe varie suivant le type de fichier et le mode d’accès choisi.
VB numérote les fichiers ouverts. Exemple : Open nom_fichier For Input As #1 affecte le n° 1 au fichier. C’est par ce numéro que l’on désigne le fichier dans les instructions.
A la fin du travail il faut fermer le fichier avec l’instruction Close.
5 Cours VB – ISG 2007/2008
I.1 Syntaxe de L'instruction Open
For Append
Mode d'accès séquentiel qui permet aux données d'être ajoutées à la fin du fichier
For Input Mode d'accès séquentiel qui permet au fichier d'être lu uniquement
For Output Mode d'accès séquentiel qui permet au fichier d'être écrit(écrase le fichier s'il existe déjà)
For Binary Mode d'accès direct qui permet aux données d'être lues ou écrites octet par octet
For Random
Mode d'accès direct qui permet aux données d'être lues ou écrites dans des enregistrements déterminés par l'argument RecLength
FileName Nom du fichier avec son chemin complet
OPEN FileName FOR AccessMode [Lock] AS [#] FileNumber [LEN=RecLength]
Lock Utile pour les situations multi-utilisateurs. Les options sont : Shared, Lock Read, Lock Write et Lock Read Write
FileNumber
Numéro de fichier entre 1 et 511
RecLength La longueur de l'enregistrement pour les fichiers d'accès direct
OPEN “c:\fichier.txt” FOR Binary AS #1 OPEN “c:\fichier.txt” FOR Input AS #1 OPEN “c:\fichier.txt” FOR Output AS #1 OPEN “c:\fichier.txt” FOR Append AS #1
OPEN “c:\fichier.txt” FOR Random AS # 1 LEN= len(Etudiant) OPEN “c:\fichier.txt” FOR Random Lock Read AS # 1 LEN= len(Etudiant)
Séquentiel
Direct
6 Cours VB – ISG 2007/2008
I.2 Syntaxe de L'instruction Close
Lorsqu’on finit de travailler avec un fichier il faut le fermer avec l’instruction Close.Syntaxe: Close [#] FileNumber
Exemple: Close #1 Close FileNumber
7 Cours VB – ISG 2007/2008
I.3 Fonctions sur les fichiers
La fonction FreeFile retourne un numéro disponible pour l’ouverture d’un fichier.Syntaxe: num = FreeFile
La fonction LOF (Length Of File) renvoie la taille en octets d'un fichier ouvert.
C'est une instruction très pratique pour lire un fichier sans connaître sa taille au départ.
Syntaxe: LOF([#] NumFich)
La fonction EOF (End Of File) renvoie true si c'est la fin du fichier et false sinonSyntaxe: EOF(NumFich)
8 Cours VB – ISG 2007/2008
II. Accès séquentiels
Ce type d’accès est approprié pour les fichiers textes (blocs continus) qui contiennent des caractères alphanumériques.
Les fichiers séquentiels sont ouverts: soit en Input : en lecture seule ; soit en Output : en écriture à partir du début,
le fichier est alors réinitialisé, il perd son contenu s’il en avait ;
soit encore en Append : on rajoute des informations à partir de la fin sans perdre ce qu’il contient déjà.
Dans les fichiers textes chaque ligne est limitée par les symboles CR-LF (Retour Chariot et Fin de Ligne).
A chaque accès (lecture ou écriture), on traite le fichier:
caractère par caractère ou ligne par ligne.
9 Cours VB – ISG 2007/2008
II.1 Lecture d'un fichier séquentiel
Le processus de base pour lire un fichier texte est le suivant:1- Ouvrir le fichier en utilisant l'instruction
Open nom_fichier For Input As #NumFich
2- Lire les données provenant du fichier en utilisant les instructions:
3- Fermer le fichier en utilisant l'instruction Close
L=Input(n, #NumFich)
Affect n caractère(s) dans L
Input #num, A, B, C
A, B, C (car on suppose qu’on a trois colonnes par ligne)
Lit une ligne complète de données dans une série de variables, chaque variable étant séparée par une virgule
Line Input #num, L Lit une ligne complète de données délimitée par un retour chariot et un retour à la ligne (CR-LF) et affecte le résultat à L
10 Cours VB – ISG 2007/2008
Exemple 1: Lecture d'un fichier séquentiel
Exercice: Ecrire un programme qui permet de lire soit ligne par ligne ou tout le fichier nommé "Fich_1.txt" stocké dans le lecteur E puis placez son contenu dans une zone texte d'une feuille.
Solution:
Propriétés du TextBox Name = TXTfile MultiLigne = True 'affichage sur plusieurs lignes ScrollBar = Both 'affichage des ascenseurs vertical et
horizontal Propriétés du CommandButton 1
Name = cmdLireTout Caption = Lire tout le fichier
Propriétés du CommandButton 2 Name = cmdLireLigne Caption = Lire ligne par ligne le fichier
11 Cours VB – ISG 2007/2008
Private Sub CMDLireTout_Click()' Détermine un numéro de fichier valide
NumFich = FreeFile' Ouverture du fichier "Fich_1.txt" sous E: en lecture
Open "E:\Fich_1.txt" For Input As #NumFich' Affectation dans la propriété Text du contrôle TXTfile
de tout le contenu du fichierTXTfile.Text = Input( LOF(NumFich), #1) Close #NumFich ‘Fermeture du fichier
End Sub
L'événement Click sur le bouton de commande nommé CMDLireTout de la feuille exécutera le code suivant:
Exemple 1: Lecture d'un fichier séquentiel
12 Cours VB – ISG 2007/2008
Private Sub CMDLireLigne_Click()Dim L As StringtxtFile.Text = ""' Détermine un numéro de fichier validenum = FreeFile' Ouverture du fichier "Fich_1.txt" sous e: en
lectureOpen "e:\Fich_1.txt" For Input As #num' Affectation de tout le contenu du fichier dans la
propriété Text du contrôle Txtfile Do While Not EOF(num) Line Input #num, L Txtfile.Text = Txtfile.Text &chr(13)&chr(10)&
LLoopClose #1 ' Fermeture du fichierEnd Sub
L'événement Click sur le bouton de commande nommé CMDLireLigne de la feuille exécutera le code suivant:
Exemple 1: Lecture d'un fichier séquentiel
13 Cours VB – ISG 2007/2008
II.2 Écriture dans un fichier séquentiel
Le processus de base pour écrire dans un fichier texte est le suivant:
1- Ouvrir le fichier avec l'instruction Open en utilisant le paramètre Output ou Append
2- Ecrire les données dans le fichier en utilisant les instructions:
Print #num, L Ecrit une série de valeurs existant dans la chaîne de caractère L. Si on appelle print plusieurs fois alors: si l'instruction se termine par une
virgule les données sont séparées par un caractère de tabulation;
si l'instruction se termine par un point-virgule les données ne sont pas séparées;
sinon (aucune ponctuation) les données sont séparées par un CR-LF.
14 Cours VB – ISG 2007/2008
Write #num, L Ecrit une série de valeurs existant dans la chaîne de caractère L et les entoure par des guillemets. Si on appelle write plusieurs fois alors:
Si l'instruction se termine par un point-virgule ou virgule les données sont séparées par des virgules;
Sinon (aucune ponctuation) les données sont séparées par un CR-LF.
3- Fermer le fichier
II.2 Écriture dans un fichier séquentiel
15 Cours VB – ISG 2007/2008
Exemple 2 : Copie d’un fichier
Exercice : Ecrire le code qui permet de lire un fichier nommé Fich_1.txt, ligne par ligne, et d’ajouter son contenu dans un second fichier déjà existant nommé Fich_2.txt et d’afficher le fichier résultat.
16 Cours VB – ISG 2007/2008
Travail à faire
Écrire un programme qui donne le même résultat que la commande Input [#]NumFich, A, B, C, … mais en utilisant la commande Line input et les opérations nécessaires sur les chaînes de caractères
17 Cours VB – ISG 2007/2008
For Random For Binary
III. Accès direct
18 Cours VB – ISG 2007/2008
III.1 For Random
Un fichier à accès direct est un fichier comprenant un enregistrement défini par un type personnalisé.
Ce type particulier est utilisé pour lire et écrire des enregistrements.
C'est le type de fichiers le plus utilisé pour gérer de grandes quantités de données.
On peut les ouvrir en lecture écriture à l’aide de l’instruction Open.
Ils sont par conséquent en mode Random. Il faut aussi préciser la taille de
l'enregistrement.
On ouvre un fichier à accès direct de la manière suivante:Open nom_fichier For Random As [#]NumFich Len=Len(VarEnreg)
Où VarEnreg est la variable d'enregistrement
19 Cours VB – ISG 2007/2008
Lecture et écriture des fichiers d’accès direct
Les instruction Get et Put permettent respectivement la lecture et l’écriture dans ce type de fichiers.
Get [#] NumFich, [num_enreg], var_enreg
' Lit l’enregistrement à la position num_enreg (ou à la position courante si ce paramètre n’apparaît pas) du fichier numéro numfich et le place dans la variable var_enreg
Put [#] NumFich, [num_enreg], var_enreg
' Ecrit le contenu de la variable var_enreg à la position num_enreg (ou à la position courante si ce paramètre n’apparaît pas) dans le fichier numéro numfich.
On peut accéder directement à un enregistrement en lecture écriture en utilisant l’instruction Seek.Syntaxe: Seek [#] NumFich, num_enreg' positionne le pointeur dans le fichier numéro numfich à l’enregistrement num_enreg
20 Cours VB – ISG 2007/2008
Exemple 3: fichiers directs en mode Random
Private Type ADR 'Définition d'un type personnalisé Nom As String * 30 Ville As String * 20End Type
Sub MAIN()Dim Enr As ADR'Ouverture du fichier en accès directOpen "C:\Gestion.TXT" For Random As 1 Len =
Len(Enr)'Ecriture dans le fichier de 2 enregistrementsEnr.Nom = "Mohamed"Enr.Ville = "Tunis"Put 1, 1, Enr 'Ecriture du 1ier enregistrementEnr.Nom = "Sarra"Enr.Ville = "Bizerte"Put 1, 2, Enr 'Ecriture du 2ème enregistrementGet 1, 1, Enr 'lecture du 1ier enregistrementMsgBox Enr.Nom & " " & Enr.Ville 'Visualisation des
champsGet 1, 2, Enr 'lecture du 2ième enregistrementMsgBox Enr.Nom & " " & Enr.Ville 'Visualisation des
champsClose 1End Sub
21 Cours VB – ISG 2007/2008
III.2 For binary
L’ouverture par for binary est appropriée si le fichier n’a pas de structure propre. Ce mode est utile lorsque les autres types (séquentiel, random) ne conviennent pas au problème traité.
Si le fichier est ouvert en binary on a alors un accès direct se basant sur le nombre d’octets précisé
Ouverture en lecture écriture :Open nom_fichier For Binary As #NumFich
Lecture :Get [#]NumFich, [posdebut] , BinVar
Remarques Posdebut: La position par où commence la lecture les commandes de lecture séquentielles (line
input, Input) sont aussi possibles L'écriture dans un fichier binaire
Put [#]NumFich, [posdebut] , BinVar
22 Cours VB – ISG 2007/2008
III.2 For binary
PositionnementSeek [#]NumFich, Pos
Si le fichier contient des enregistrement et qu’on a utilisé la commande open for binary pour l’ouvrir, cette commande permet le positionnement comme suit:
Seek #NumFich, 1 : le premier Seek #NumFich, Len(Enr) : le second Seek #NumFich, Len(Enr)*2 : le troisieme …
Si le fichier est un fichier texte le seek précise le nombre d’octets qu’il doit ignorer avant de commencer la lecture
23 Cours VB – ISG 2007/2008
III.2 For binary
Le nombre d'octets lus et écrits dépend du type de données de la variable de lecture nommée (dans cet exemple) BinVar.
En général, on utilise des variables de type chaînes de caractères comme l'indique l'exemple suivant:
Private Sub CMDBinaire_Click()'On définit une variable qui sert à récupérer les données du fichierDim BinVar As String * 10'On ouvre le fichier en mode binaire, Open "e:\Fich_1.txt" For Binary As #1Get 1, , BinVar'On affiche le résultat dans la zone text1Text1.Text = BinVar'On ferme le fichierClose 1End Sub
Private Sub CMDBinaire_Click()'On définit une variable qui sert à récupérer les données du fichierDim BinVar As String'On ouvre le fichier en mode binaire, Open "e:\Fich_1.txt" For Binary As #1'On récupère les 100 premiers caractèresBinVar = Space$(100)Get 1, , BinVar'On affiche le résultat dans la zone text1Text1.Text = BinVar'On ferme le fichierClose 1End Sub
24 Cours VB – ISG 2007/2008
Remarques Générales
Dans les modes Binary, Input et Random, on n’est pas obligé de fermer un fichier avant de l'ouvrir sous un autre numéro de fichier.
Dans les modes Append et Output, on doit fermer un fichier avant de l'ouvrir avec un autre numéro de fichier.
Si on ouvre un fichier texte en direct par for random alors les commandes de lecture séquentielles (input, line input, …) ne sont plus possibles
25 Cours VB – ISG 2007/2008
Les commandes manipulant les fichiers
Commande
Action
ChDir Change le répertoire courant
CurDrive Change le lecteur courant
Dir Renvoie le nom de fichier ou un répertoire correspondant à un modèle ou à un attribut de fichier
FileCopy Copie un fichier
FileDateTime
Renvoie la date et l'heure (temps) de la dernière modification du fichier
FileLen Renvoie la taille d'un fichier en octets
GetAttr Renvoie une valeur qui représente un attribut d'un fichier
Kill Efface un fichier
MkDir Crée un nouveau répertoire
Name Renomme un fichier ou répertoire
RmDir Efface un répertoire vide
SetAttr Change l'attribut d'un fichier
26 Cours VB – ISG 2007/2008
Exercice
Écrire le code des deux boutons de commande.