Stockage de données
Présentation
• Le stockage des données dans les variables et tableaux est temporaire :– Nous avons vu la notion de durée de vie des
variables Les variables et donc les données sont détruites lorsque l’on quitte l’application. La mémoire est restituée au système d’exploitation
– Pour les données en entrée : elles sont soit recueillies manuellement soit assignées de manière statique dans le code (constantes) Il nous faut une solution permettant la (ré)utilisation des données d’une exécution à l’autre
Gestion de fichiers
• Les fichiers permettent la rétention permanente de larges quantités de données
• Les données contenues dans des fichiers sont dites permanentes
• Les fichiers sont stockés dans des unités périphériques : disques durs, disques et bande magnétiques, disques optiques,…
• Comme utilisateurs de Windows, vous êtes déjà familier avec la notion de fichier, leurs regroupements en répertoires et leur classification en arborescence (de fichiers).
Gestion de fichiers
• La norme pour les noms de fichiers sous windows (9x / 2000 / Me / XP/ 7) :– Composition : caractères
alphanumériques (lettres, chiffres), tirets, trait de soulignement, espace
– Maximum de 255 caractères– Extension facultative : un point et trois
caractères (qui indiquent le type du fichier : .bas, .prw, .wav, .txt, .exe, …)
Gestion de fichiers
• Le nombre total de fichiers pouvant être ouverts par le système est limité (cela dépend du système, avec VB c’est 255)
• Chaque fichier dispose d’un numéro de canal (la fonction FreeFile permet de laisser au système le soin de définir ce numéro)
• Le travail sur les fichiers ce décompose en trois phases :1. Ouverture2. Traitement3. Fermeture
Gestion de fichiers
• VB permet de lire et écrire toute sorte de fichiers (graphiques, sons, binaires, textes, données).
• On distingue les fichiers à accès séquentiel et les fichiers à accès aléatoire (ou accès direct).
• Il ne faut pas confondre les fichiers de code (exécutable ou sources) et les fichiers de données.
Fichiers à accès séquentiel
• Par simplification, pour les fichiers à accès séquentiel, nous ne nous intéresserons qu’à la gestion des fichiers texte (contenant des données textuelles).
• Un fichier à accès séquentiel est composé d’une suite de lignes de texte séparé par un séparateur : un retour à la ligne (Chr(13)&Chr(10) ou CRLF)
Carriage Return / Line Feed
Fichiers à accès séquentiel
CR LF
J u d y
J u d y
CR LF
LFCR
00010110 01100101 01101001 11001100
Fichier
Enregistrement
Chr(13)&Chr(10)
Chaîne (String)
Bit / Octet
Enregistrement
Fichiers à accès séquentiel
• Syntaxe :Dim Canal As Integer ‘déclaration du canalCanal = FreeFile ‘initialisation du canalOpen <nomfichier> For <mode> As #Canal‘ TraitementClose #Canal ‘fermeture du fichier
• Où <mode> peut prendre trois valeurs :– Input : lecture seule– Output : accès en écriture, le fichier est vidé
de son contenu préalable– Append : ajout non destructif, les données sont
ajoutées à la fin du fichier
Fichiers à accès séquentiel
• Les différents traitements sont :– Line Input #<canal>,<var> : fonction de
lecture d’une ligne de texte (ouvert en Input)– Print #<canal>,<var> : fonction d’écriture
dans un fichier (ouvert en Output ou en Append)
• EOF(<canal>) (End Of File) : fonction booléenne de repérage de fin de fichier (une lecture au-delà de la fin de fichier est une erreur système)
Gestion de fichiers
• VB dispose d’instructions équivalentes à celles du DOS pour les répertoires :– Chdrive <lecteur> : change le lecteur courant– ChDir <chemin> : change le répertoire courant– Curdir : retourne le nom du répertoire courant– Mkdir <répertoire> : crée le répertoire spécifié– Rmdir <répertoire> : détruit le répertoire (vide)
spécifié
• Les arguments (en entrée comme en sortie) doivent être des chaînes de caractère : variables (String) ou valeurs (« »)
Gestion de fichiers
• VB dispose d’instructions équivalentes à celles du DOS pour les fichiers :– Dir(masque, attribut): retourne le nom du premier
fichier correspondant au masque et possédant l’attribut considéré
– FileAttr, FileDate, File : retournent respectivement les attributs, la date de création et la longueur
– FileCopy source, destination : copie le fichier source sous le nom destination
– Kill <nom> : supprime le fichier indiqué (pas de corbeille)
– Name <ancien> As <nouveau> : renomme le fichier ancien en nouveau
Fichiers à accès séquentiel• Exemple :
Private Sub ExempleFile()Dim canal As Integer 'déclaration du canalDim courante As String 'déclaration de la ligne courantecanal = FreeFile 'initialisation du canalMsgBox(CurDir) 'affiche le répertoire courantChDir "c:\test" 'change le répertoire courantMsgBox(CurDir) 'affiche le nouveau répertoireOpen "test.txt" For Input As #canal 'ouvre le fichierDo Until EOF(canal) 'tant que pas fini
Line Input #canal, courante 'lire la prochaine ligne
MsgBox(courante) 'l'afficherLoop 'fin de boucleClose #canal 'fermeture du fichier
End Sub 'fin de procédure
Fichiers à accès direct /aléatoire
• Les fichiers à accès direct permettent un accès rapide à une donnée précise dans le fichier (d’où leur(s) nom(s)).
• Les fichiers à accès direct sont structurés différemment (ce n’est pas que le mode d’accès qui change) : ils sont une collection d’enregistrements de même taille. On utilise un type utilisateur (Type)pour définir ces enregistrements (avec une contrainte de définition précise de la taille: String * X, tableaux de taille fixe, …)
Hiérarchie de données
J u d y
00010110 01100101 01101001 11001100
Chaîne (String)
Bit / Octet
Enregistrement
Fichier
Fichiers à accès direct / aléatoire
• Ouverture / crétation d’un fichier à accès direct :
Dim Canal1 As Integer ‘déclaration du canalCanal1 = FreeFile ‘initialisation du canalOpen <nomfichier> For Random [Access <mode>] As#Canal1 Len=Len(<variable_enregistrement>)‘ Traitement des donnéesClose #Canal ‘fermeture du fichier
• Par défaut, les fichiers à accès direct sont ouverts en lecture et en écriture, mais on peut préciser : read, write, read write
Fichiers à accès direct / aléatoire
• Lecture des données, syntaxe :Get #Canal, <num>, variable_réception– Get affecte les valeurs de l’enregistrement
numéro <num> aux champs correspondants de variable_réception
– Adresser un enregistrement du fichier qui n’existe pas est une erreur dynamique.
– La fonction LOF(Canal) renvoie la taille du fichier en nombre d’octets du fichier.
– LOF(Canal)/Lenb(variable_réception) nous donne donc la taille du fichier en nombre d’enregistrements (pratique, mais peu sur).
Fichiers à accès direct / aléatoire
• Écriture des données, syntaxe :Put #Canal, <num>,
variable_réception– Put affecte les valeurs de
l’enregistrement variable_réception aux champs correspondants de l’enregistrement numéro <num> du fichier de canal Canal
– EOF(Canal) renvoie vraie lorsque la fin du fichier est rencontrée
Fichiers à accès direct / aléatoire
• Exemple d’utilisation :Private Type ClientRecord
accountNumber As IntegerlastName As String * 15firstName As String * 15balance As Currency
End TypeSub Initialisation() ‘procédure d’initialisation du
fichierDim BlankClient As ClientRecord ' type utilisateurDim x as integerOpen "c:\clients.rnd" For Random Access Write As #1 Len=Len(BlankClient)For x = 1 To 100
Put #1, x, udtBlankClient ' écrit 100 enregistrementsNextClose #1 ' ferme le fichier
End Sub
Exercices- Fichiers séquentiels -
• Écrire un programme qui :– Ouvre un répertoire Tests dans Mes documents (vous
devez avoir déjà crée ce répertoire)– Y crée un fichier test.txt et y insère la liste des numéro,
nom et prénom d’au moins trois étudiants.– Ferme le fichier.
• Écrire un programme qui – Demande à l’utilisateur le numéro de l’étudiant
recherché,– Affiche toutes les informations sur cet étudiant
• Écrire un programme qui – Ouvre votre fichier précédemment créé– Affiche son contenu de manière « ergonomique » dans la
feuille Feuil1.
Exercices- Fichiers à accès direct -
• On se propose d’écrire un programme permettant de gérer les commandes des différents clients. – Un client est défini par un numéro, un nom et une adresse.– Une commande est définie par un numéro, une date, le numéro du
client qui a passé la commande et enfin par le numéro et la quantité du produit concerné.
– Un produit est défini par un numéro, une désignation, un prix unitaire et un stock.
• Ecrire un programme qui : – Crée un répertoire Commandes– Dans ce répertoire, il crée trois fichiers :
• Clients.mie contenant la liste des clients.• Commandes.mie contenant la liste des commandes. • Produits.mie contenant la liste des produits.
• Une fois ces trois fichiers crées, votre programme demande à l’utilisateur ce qu’il veut faire. Selon la réponse de l’utilisateur, le programme applique le traitement demandé :– 1 : l’utilisateur pourra saisir un nouveau client– 2 : il pourra saisir un nouveau produit– 3 : il pourra saisir une nouvelle commande.
Top Related