26
Cours VB 2007/2008 1 Chapitre 4 Manipulation des fichiers dans le langage VB

Cours VB 2007/2008 1 Chapitre 4 Manipulation des fichiers dans le langage VB

Embed Size (px)

Citation preview

Page 1: Cours VB 2007/2008 1 Chapitre 4 Manipulation des fichiers dans le langage VB

Cours VB 2007/2008 1

Chapitre 4

Manipulation des fichiersdans le langage VB

Page 2: Cours VB 2007/2008 1 Chapitre 4 Manipulation des fichiers dans 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

Page 3: Cours VB 2007/2008 1 Chapitre 4 Manipulation des fichiers dans le langage 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

Page 4: Cours VB 2007/2008 1 Chapitre 4 Manipulation des fichiers dans le langage VB

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.

Page 5: Cours VB 2007/2008 1 Chapitre 4 Manipulation des fichiers dans le langage VB

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

Page 6: Cours VB 2007/2008 1 Chapitre 4 Manipulation des fichiers dans le langage VB

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

Page 7: Cours VB 2007/2008 1 Chapitre 4 Manipulation des fichiers dans le langage VB

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)

Page 8: Cours VB 2007/2008 1 Chapitre 4 Manipulation des fichiers dans le langage VB

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.

Page 9: Cours VB 2007/2008 1 Chapitre 4 Manipulation des fichiers dans le langage VB

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

Page 10: Cours VB 2007/2008 1 Chapitre 4 Manipulation des fichiers dans le langage VB

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

Page 11: Cours VB 2007/2008 1 Chapitre 4 Manipulation des fichiers dans le langage VB

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

Page 12: Cours VB 2007/2008 1 Chapitre 4 Manipulation des fichiers dans le langage VB

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

Page 13: Cours VB 2007/2008 1 Chapitre 4 Manipulation des fichiers dans le langage VB

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.

Page 14: Cours VB 2007/2008 1 Chapitre 4 Manipulation des fichiers dans le langage VB

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

Page 15: Cours VB 2007/2008 1 Chapitre 4 Manipulation des fichiers dans le langage VB

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.

Page 16: Cours VB 2007/2008 1 Chapitre 4 Manipulation des fichiers dans le langage VB

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

Page 17: Cours VB 2007/2008 1 Chapitre 4 Manipulation des fichiers dans le langage VB

17 Cours VB – ISG 2007/2008

For Random For Binary

III. Accès direct

Page 18: Cours VB 2007/2008 1 Chapitre 4 Manipulation des fichiers dans le langage VB

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

Page 19: Cours VB 2007/2008 1 Chapitre 4 Manipulation des fichiers dans le langage VB

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

Page 20: Cours VB 2007/2008 1 Chapitre 4 Manipulation des fichiers dans le langage VB

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

Page 21: Cours VB 2007/2008 1 Chapitre 4 Manipulation des fichiers dans le langage VB

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

Page 22: Cours VB 2007/2008 1 Chapitre 4 Manipulation des fichiers dans le langage VB

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

Page 23: Cours VB 2007/2008 1 Chapitre 4 Manipulation des fichiers dans le langage VB

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

Page 24: Cours VB 2007/2008 1 Chapitre 4 Manipulation des fichiers dans le langage VB

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

Page 25: Cours VB 2007/2008 1 Chapitre 4 Manipulation des fichiers dans le langage VB

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

Page 26: Cours VB 2007/2008 1 Chapitre 4 Manipulation des fichiers dans le langage VB

26 Cours VB – ISG 2007/2008

Exercice

Écrire le code des deux boutons de commande.