You are on page 1of 27

Chapitre 2 : Traitement des

fichiers

Réalisé par: J. Mechbouh & O. El Kharki

Site web pédagogique:


http://www.elkharki.africa-web.org/
Ou bien http://perso.menara.ma/~elkharki
Chapitre 2 : Traitement des fichiers
Sommaire

 Introduction
 Fichiers Séquentiels
 Fichiers binaires
 Fichiers à accès direct
 Quelques opérations de gestion des fichiers

J. Mechbouh & O. EL Kharki 2


Introduction

Le traitement d’un fichier se fait en trois phases :


 Ouverture du fichier
 Traitement du fichier (lecture ou/et écriture)
 Fermeture de fichier

Il existe trois modes d’accès aux fichiers :


 Le mode d’accès séquentiel, utilisé pour des fichiers texte. Les données d'un
fichier à accès séquentiel sont toujours traitées l'une après l'autre dans l’ordre
de leur enregistrement (on ne peut donc accéder à une information qu'en ayant
au préalable examiné celle qui la précède).
 Le mode d’accès direct (ou aléatoire), où le fichier est constitué
d’enregistrement ayant tous la même longueur. On peut accéder directement à
n’importe quel enregistrement en précisant son numéro.
 Le mode d’accès binaire, où le fichier est constitué d’une suite d’octets. On
accède à une donnée à partir de sa position en octets dans le fichier.

J. Mechbouh & O. EL Kharki 3


Fichiers Séquentiels
Définition: Fichier texte

Un fichier texte est constitué de lignes de caractères se


terminant par un retour chariot et un changement de ligne
(chr(13)+chr(10)).

J. Mechbouh & O. EL Kharki 4


Fichiers Séquentiels
Ouverture d’un fichier texte

L’instruction Open permet d’ouvrir un fichier texte


Syntaxe : Open nom-Fichier For mode As #numéro-de-fichier

nom-Fichier : Nom du fichier à ouvrir avec son chemin

mode : Il existe trois mode d'ouverture du fichier texte :


- Append : permet d’ajouter des données à un fichier séquentiel existant
en conservant le contenu précédent. Le fichier est créé s’il n’existe pas.
- Input : permet d’ouvrir le fichier en lecture seul
- Output : Indique son accès en écriture. Dans ce mode, un nouveau
fichier est toujours crée. Si le fichier existe déjà, il est réinitialisé à vide et
son contenu précédent est perdu.

numéro-de-fichier : Pour ouvrir un fichier, il faut lui allouer un numéro du canal


valide et disponible compris entre 1 et 511, inclus. Cette opération peut être géré
par la fonction FreeFile J. Mechbouh & O. EL Kharki 5
Fichiers Séquentiels
Ouverture d’un fichier texte: exemples

Exemples :
Open "E: \Clients.txt" for Append as #1
‘ Ouvre un fichier séquentiel en mode Append (ajout)
Open "E: \produit.dat" for Input as #1
‘ Ouvre un fichier séquentiel en mode Input (lecture seule)

Dim numF As Integer


numF=FreeFile
Open "E: \personne.dat" for Output as numF
‘ Ouvre un fichier séquentiel en mode Output (écriture)

J. Mechbouh & O. EL Kharki 6


Position du pointeur à l'ouverture des fichiers séquentiels en mode
Input, Output et Append
Le pointeur Le pointeur
d’enregistrement d’enregistrement
est placé au début est placé au début
du fichier du fichier

enregistrements
¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤ ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤ ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤

Pas d’enregistrements
¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤ ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
enregistrements

¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤ ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤ ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤ ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
Fichier ouvert Fichier ouvert Fichier ouvert
en mode en mode en mode
Input Output Append
Le pointeur
d’enregistrement
est placé à la fin
du fichier
Fichiers Séquentiels
Fermeture d’un fichier texte

Utiliser l’instruction Close


Syntaxe : Close #numF
Exemple: close #1 ou bien close #numF

NB: Une instruction Close sans numéro_de_fichier ferme tous


les fichiers ouverts.

J. Mechbouh & O. EL Kharki 8


Fichiers Séquentiels
Lecture d’un fichier texte

Line input # : instruction utilisée pour lire la ligne suivante d’un fichier
Exemple: Line Input #numF, Ligne
‘Lit le fichier ligne par ligne dans la variable Ligne
‘ le dièse # est obligatoire

Fonction Input : fonction utilisée pour lire un nombre de caractères donné


d’un fichier
Exemple: Chaine = input(LOF(numF), numF)
‘renvoie la totalité du fichier associe au numF
‘ dans la variable chaine

J. Mechbouh & O. EL Kharki 9


Fichiers Séquentiels
Lecture d’un fichier texte dans une zone de liste

Private Sub cmdFichier_Click()


Dim Ligne As String
Dim numF as integer
liste.Clear ' Vide la liste

numF = FreeFile
Open "Chemin\texte.txt" For Input As numF ' Ouvre le fichier

Do While Not EOF(numF)


Line Input #numF, Ligne ' Lit ligne par ligne
liste.AddItem Ligne
Loop

Close #numF ' Ferme le fichier


End Sub

Si la fin du fichier est rencontrée, la J.


fonction & O. ELrenvoie
EOF()
Mechbouh Kharki la valeur True 10
Fichiers Séquentiels
Lecture d’un fichier texte: interface

J. Mechbouh & O. EL Kharki 11


Fichiers Séquentiels
Lecture d’un fichier texte: Amélioration

Dim Ligne As String


Dim numF As Integer
diag.ShowOpen
liste.Clear ' Vide la liste

numF = FreeFile
Open diag.FileName For Input As numF ' Ouvre le fichier

Do While Not EOF(numF)


Line Input #numF, Ligne ' Le lit
liste.AddItem Ligne
Loop

Close numF ' Ferme le fichier

J. Mechbouh & O. EL Kharki 12


Fichiers Séquentiels
Lecture d’un fichier texte dans une Zone de Texte

Private Sub cmdFichier_Click()


Dim texte As String
Dim numF As Integer
TxtFichier.text = "" ' Vide la Zone de Texte

numF = FreeFile
Open "chemin\texte.txt" For Input As numF ' Ouvre le fichier

texte = Input(LOF(numF), numF) ' Lit le fichier en une seule fois


TxtFichier.Text = texte

Close numF ' Ferme le fichier


End Sub

J. Mechbouh & O. EL Kharki 13


Fichiers Séquentiels
Écriture dans un fichier texte

Utiliser l’instruction Print #


Syntaxe: Print# numF, chaine

Exemple
Ligne= “bonjour”
Print #1, ligne

D’autres syntaxes : voir les TDs


Exécuter le code : Fic_seq_ecriture

J. Mechbouh & O. EL Kharki 14


Fichiers binaires
Ouverture, Lecture et écriture

Définition: Un fichier binaire contient des suites d’octets et la fin du fichier est
marquée par le caractère null du code ASCII (chr(o)) (Fadil, 2004).
Ouverture d’un fichier binaire:
Dim numF as integer
numF = Freefile
open “nom_et_chemin_du_fichier” for binary as #numF
Lecture dans un fichier binaire:
Get #numF, Nb_octets, chaine
‘ Où Nb_octects correspond au nombre d’octets à lire et chaine la variable où
‘ seront stockées les données lues.
Écriture dans un fichier binaire:
Put #numF, Nb_octets, chaine
‘ Pour écrire Nb_octects d’octets stockés dans chaine dans le fichier à partir de
‘ la position du pointeur.
J. Mechbouh & O. EL Kharki 15
Fichiers binaires
Positionnement et Fermeture

Positionnement dans un fichier binaire:


‘ Pour se positionner à un emplacement précis dans le fichier, on utilise la
‘ commande Seek selon la syntaxe suivante :
Seek #numF, Nb_octets

Fermeture d’un fichier binaire :


Close #numF

J. Mechbouh & O. EL Kharki 16


Fichiers binaires
Exemple

Voir les TDs


Exécuter le code : FicDump

J. Mechbouh & O. EL Kharki 17


Fichiers à accès direct
Définition et exemple

Définition: Un fichier à accès direct contient des données organisées dans


des enregistrements de longueur fixe.
Exemple:

Nom, Prenom, DateN (date de naissance), Sexe : sont les champs du type
personnalisé
J. Mechbouh & O. EL Kharki 18
Fichiers à accès direct
L’Ouverture

Syntaxe:
numF = FreeFile
Open nom_du_fichier for random as # numF Len = Len(P)

Len(P): une fonction qui retourne le nombre d’octets occupé par


la variable P.
Open: instruction qui permet d’ouvrir un fichier.
Si le fichier n’existe pas, il sera créé.

Exemple:
Open ”personne.txt” for random as # numF len = len(P)

J. Mechbouh & O. EL Kharki 19


Fichiers à accès direct
Lecture, écriture et Fermeture

Syntaxe de lecture:
Get #numF, i, P
Get: permet de lire dans la variable P l’enregistrement dont
le numéro est i.
i est le numéro de l’enregistrement.

Syntaxe d’écriture:
Put #numF, i, P

Put : permet d’écrire dans la position i du fichier dont le nom


interne est numF l’enregistrement P

Syntaxe de fermeture:
Close #numF
Ferme le fichier dont le nom interne est numF
J. Mechbouh & O. EL Kharki 20
Fichiers à accès direct
Application: créer et afficher le contenu dans une liste

J. Mechbouh & O. EL Kharki 21


L’application est constituée d’une feuille et d’un module.
Code du module :
Public Type personne 'Déclaration du type Personne
nom As String * 20
prenom As String * 15
dateN As Date
sexe As String * 1
End Type
Public P As personne 'Déclaration d'une variable de type Personne
Public NumF As Integer 'Déclaration du nom interne du fichier
Public ne As Integer 'Nombre d'enregistrement
Public Sub ouvrirF() 'Procédure ouvrir un fichier
NumF = FreeFile
Open App.Path & "\persoone.txt" For Random As #NumF Len = Len(P)
End Sub
Public Sub fermerF() 'Procedure fermer le fichier
Close #NumF
End Sub
Public Sub ecrireF() 'Procédure écrire dans le fichier
Dim i As Integer ' (écriture d’un enregistrement)
ne = LOF(NumF) \ Len(P)
ne = ne + 1
i = ne
P.nom = InputBox("donner le Nom")
P.prenom = InputBox("donner le Prenom")
P.dateN = CDate(InputBox("donner la date de naissance"))
P.sexe = InputBox("donner le sexe, saisir M ou F")
Put #NumF, i, P
End Sub
Public Sub lireF() 'Procédure lire le fichier dans la zone de liste
Dim i As Integer
Form1.LstF.Clear
ne = LOF(NumF) \ Len(P)
For i = 1 To ne
Get #NumF, i, P
Form1.LstF.AddItem P.nom & Space(3) & P.prenom & Space(3) _
& P.dateN & Space(3) & P.sexe
Next i
End Sub
Public Sub supprimerF() 'Procedure supprimer le fichier
Kill App.Path & "\persoone.txt"
Form1.LstF.Clear
End Sub

Code du module de la feuille :


Private Sub CmdE_Click() ‘Code du bouton Écrire dans le fichier
ouvrirF
ecrireF
fermerF
End Sub

Private Sub CmdL_Click() ‘Code du bouton lire le fichier


ouvrirF
lireF
fermerF
End Sub

Private Sub CmdS_Click() ‘Code du bouton supprimer le fichier


supprimerF
End Sub
Traitement des Fichiers
Quelques opérations de gestion des fichiers

FileLen(“Nom_du_Fichier”) : renvoie la taille du fichier


Exemple: Msgbox Filelen(“fich.dat”)

Kill “Nom_du_Fichier” : supprime le fichier Nom_du_Fichier


Exemple: kill “fich.dat”

CurDir() : renvoie sous forme de chaîne de caractères le répertoire


courant de l’application
Exemple: Msgbox CurDir()

FileCopy “Nom_du_Fichier1”, “Nom_du_Fichier2” : copie le fichier


Nom_du_Fichier1 vers le fichier Nom_du_Fichier2
Exemple: FileCopy “fich.dat” , “fichier.dat”

J. Mechbouh & O. EL Kharki 25


Traitement des Fichiers
Quelques opérations de gestion des fichiers

App.Path: renvoie sous forme de chaîne de caractères le chemin d’accès à


l’application en cours
Exemple : Msgbox app.path

Open App.path & “\fich.txt” for output as #1


‘ ouverture du fichier fich.txt
‘ le fichier est stocké sous le même répertoire que l’application

J. Mechbouh & O. EL Kharki 26


Traitement des Fichiers
Fonction EOF

Visual Basic se sert d'un pointeur pour marquer l'emplacement du prochain


enregistrement à lire ou écrire.
Vous pouvez utiliser la fonction EOF (End Of File) en combinaison avec l'opérateur
logique NOT pour déterminer si le pointeur a atteint la fin du fichier.

La syntaxe de la fonction EOF est: EOF (numF)


où numF est le numéro de fichier qui a été utilisé dans l'instruction Open.

L'instruction à utiliser est : Do While Not EOF(numF)


[Instructions]
Loop

J. Mechbouh & O. EL Kharki 27

You might also like