270 likes | 393 Views
Chapitre 4. Manipulation des fichiers dans le langage VB. 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. Introduction.
E N D
Chapitre 4 Manipulation des fichiers dans le langage VB Cours VB 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 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ésultats obtenus. • 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 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 #1affecte 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. Cours VB – ISG 2007/2008
I.1 Syntaxe de L'instruction Open OPEN FileName FOR AccessMode [Lock] AS [#] FileNumber [LEN=RecLength] OPEN “c:\fichier.txt” FOR Random AS # 1 LEN= len(Etudiant) OPEN “c:\fichier.txt” FOR Random Lock Read AS # 1 LEN= len(Etudiant) OPEN “c:\fichier.txt” FOR Binary AS #1 OPEN “c:\fichier.txt” FOR Input AS #1 OPEN “c:\fichier.txt” FOR Append AS #1 OPEN “c:\fichier.txt” FOR Output AS #1 Séquentiel Direct 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 Cours VB – ISG 2007/2008
I.3 Fonctions sur les fichiers • La fonction FreeFileretourne 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 sinon Syntaxe: EOF(NumFich) 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. 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 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 Cours VB – ISG 2007/2008
Exemple 1: Lecture d'un fichier séquentiel 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 fichier TXTfile.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: Cours VB – ISG 2007/2008
Exemple 1: Lecture d'un fichier séquentiel Private Sub CMDLireLigne_Click() Dim L As String txtFile.Text = "" ' Détermine un numéro de fichier valide num = FreeFile ' Ouverture du fichier "Fich_1.txt" sous e: en lecture Open "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)& L Loop Close #1 ' Fermeture du fichier End Sub • L'événement Click sur le bouton de commande nommé CMDLireLignede la feuille exécutera le code suivant: 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. Cours VB – ISG 2007/2008
II.2 Écriture dans un fichier séquentiel • 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 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. 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 Cours VB – ISG 2007/2008
III. Accès direct • For Random • For Binary 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 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 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 * 20 End Type Sub MAIN() Dim Enr As ADR 'Ouverture du fichier en accès direct Open "C:\Gestion.TXT" For Random As 1 Len = Len(Enr) 'Ecriture dans le fichier de 2 enregistrements Enr.Nom = "Mohamed" Enr.Ville = "Tunis" Put 1, 1, Enr 'Ecriture du 1ier enregistrement Enr.Nom = "Sarra" Enr.Ville = "Bizerte" Put 1, 2, Enr 'Ecriture du 2ème enregistrement Get 1, 1, Enr 'lecture du 1ier enregistrement MsgBox Enr.Nom & " " & Enr.Ville 'Visualisation des champs Get 1, 2, Enr 'lecture du 2ième enregistrement MsgBox Enr.Nom & " " & Enr.Ville 'Visualisation des champs Close 1 End Sub 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 Cours VB – ISG 2007/2008
III.2 For binary • Positionnement Seek [#]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 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 fichier Dim BinVar As String * 10 'On ouvre le fichier en mode binaire, Open "e:\Fich_1.txt" For Binary As #1 Get 1, , BinVar 'On affiche le résultat dans la zone text1 Text1.Text = BinVar 'On ferme le fichier Close 1 End Sub Private Sub CMDBinaire_Click() 'On définit une variable qui sert à récupérer les données du fichier Dim 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ères BinVar = Space$(100) Get 1, , BinVar 'On affiche le résultat dans la zone text1 Text1.Text = BinVar 'On ferme le fichier Close 1 End Sub 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 Cours VB – ISG 2007/2008
Les commandes manipulant les fichiers Cours VB – ISG 2007/2008
Exercice Écrire le code des deux boutons de commande. Cours VB – ISG 2007/2008