3
I - Petit rappel sur les fichiers Sous DOS et Win 3.xx les fichiers sont de la forme 8.3 soit 8 caractères pour le nom à propre- ment parler puis un " . " pour une extension facultative pouvant aller jusqu'à 3 caractères. Sous win95 / 98 les noms des fichiers peuvent aller jusqu'à 255 caractères (chemin compris), la règle de l’extension reste inchangée. Avec VB, pour ouvrir un fichier, il faut lui allouer un numéro de canal valide, cette opération peut être gérée par le système grâce à la commande Freefile dé- finie plus loin. Le travail sur fichier, quel qu’il soit passe par les 3 phases : Ouverture (Open), trai- tement, fermeture (Close). Cette dernière peut être faite automatiquement par le système lors de la commande End mais il vaut mieux, par soucis de rigueur toujours décharger un fichier après traitement car aucune action (destruction, réouverture …) n’est possible sur un fichier chargé ou un canal encore utilisé. Il existe dans Visual Basic 3 types d’accès au fichiers. Nous allons les étudier dans cet ordre : Accès binaire, Accès aléatoire et Accès séquentiel. II - Accès binaire Les fichiers en accès binaire ne sont en fait que de " vulgaires " suites d’octets. Le seul point im- portant est que le caractère nul de code ASCII 0 (char(0)) marque la fin d’un fichier accès binaire. L’ouverture d’un fichier en accès binaire : dim canal as byte canal = Freefile ‘canal reçoit un numéro d’enregistrement valide automatiquement Open " nom_et_chemin_du_fichier " For Binary as canal Les instruction Get et Put sont utilisées pour lire / écrire des données. L’emplacement spécifié marque l’emplacement du premier octet de la séquence. Exemple : pour accéder aux 64 octets situés après le 8ème Dim reponse as String * 32 ‘Déclaration d’une variable chaîne de 32 caractères de longueur Get canal, 8, reponse ‘Acquisition Il est important de noter qu'après une lecture le curseur de lecture est positionné après le dernier caractère lu. Pour se positionner à un emplacement précis dans le fichier, on peut employer la commande Seek. Pour changer, nous allons employer la commande Input : Dim reponse as String*32 Seek canal, 8 Reponse = input (32, canal) Bien sûr, ce mode d'accès ne transmet que des caractères, c'est ensuite à vous a donner du sens à ces données. III - Accès aléatoire Un fichier en accès aléatoire (appelé aussi accès direct ) est composé d’enregistrements ayant tous la même structure (même suite de même type d’une même longueur). Pour cela, il faut défi- nir un Type personnalisé de la façon suivante (de préférence à Général à Déclarations) : Private type un_perso Nom as string * 20 Prénom as String * 15 Age as Integer Adresse as string * 80 End type Université de Valenciennes - La Programmation en Visual Basic par MARLIN B. Les fichiers sous Visual Basic MB Page 1

Fichier => VB6

Embed Size (px)

DESCRIPTION

Cours des fichier en VB 6.

Citation preview

  • I - Petit rappel sur les fichiers

    Sous DOS et Win 3.xx les fichiers sont de la forme 8.3 soit 8 caractres pour le nom propre-ment parler puis un " . " pour une extension facultative pouvant aller jusqu' 3 caractres. Sous win95 / 98 les noms des fichiers peuvent aller jusqu' 255 caractres (chemin compris), la rgle de lextension reste inchange. Avec VB, pour ouvrir un fichier, il faut lui allouer un numro de canal valide, cette opration peut tre gre par le systme grce la commande Freefile d-finie plus loin. Le travail sur fichier, quel quil soit passe par les 3 phases : Ouverture (Open), trai-tement, fermeture (Close). Cette dernire peut tre faite automatiquement par le systme lors de la commande End mais il vaut mieux, par soucis de rigueur toujours dcharger un fichier aprs traitement car aucune action (destruction, rouverture ) nest possible sur un fichier charg ou un canal encore utilis. Il existe dans Visual Basic 3 types daccs au fichiers. Nous allons les tudier dans cet ordre : Accs binaire, Accs alatoire et Accs squentiel.

    II - Accs binaire

    Les fichiers en accs binaire ne sont en fait que de " vulgaires " suites doctets. Le seul point im-portant est que le caractre nul de code ASCII 0 (char(0)) marque la fin dun fichier accs binaire. Louverture dun fichier en accs binaire :

    dim canal as byte canal = Freefile canal reoit un numro denregistrement valide automatiquement Open " nom_et_chemin_du_fichier " For Binary as canal

    Les instruction Get et Put sont utilises pour lire / crire des donnes. Lemplacement spcifi marque lemplacement du premier octet de la squence.

    Exemple : pour accder aux 64 octets situs aprs le 8me

    Dim reponse as String * 32 Dclaration dune variable chane de 32 caractres de longueur Get canal, 8, reponse Acquisition

    Il est important de noter qu'aprs une lecture le curseur de lecture est positionn aprs le dernier caractre lu. Pour se positionner un emplacement prcis dans le fichier, on peut employer la commande Seek. Pour changer, nous allons employer la commande Input :

    Dim reponse as String*32 Seek canal, 8 Reponse = input (32, canal)

    Bien sr, ce mode d'accs ne transmet que des caractres, c'est ensuite vous a donner du sens ces donnes.

    III - Accs alatoire Un fichier en accs alatoire (appel aussi accs direct ) est compos denregistrements ayant tous la mme structure (mme suite de mme type dune mme longueur). Pour cela, il faut dfi-nir un Type personnalis de la faon suivante (de prfrence Gnral Dclarations) :

    Private type un_perso Nom as string * 20 Prnom as String * 15 Age as Integer Adresse as string * 80 End type

    Universit de Valenciennes - La Programmation en Visual Basic par MARLIN B.

    Les fichiers sous Visual Basic

    MB Page 1

  • On pourra alors dclarer des variables de type un_perso de la sorte :

    Dim perso as un_perso Dim canal as byte Canal = Freefile Open "c:\mesprogs\classe.dat" For Random as canal len = len(perso) 'Ouvre le fichier c:\mesprogs\classe.dat en accs alatoire avec une longueur d'enregistrement gale la longueur de la variable

    Les Action de lecture/criture se font l aussi grce Get et Put :

    Get canal, 5, lve1 'Lit le 5e enregistrement et la place dans lve 1 Put canal, 1, lve1 'Ecrit le contenu de lve 1 en premire position de "classe.dat"

    On peut noter que le premier lment d'un fichier porte l'indice 1 et non pas 0. Et en finissant on ferme grce la commande :

    Close canal 'ferme canal

    Ou encore Close 'ferme tous les fichiers ouverts. A utiliser avec parcimonie car elle pourrait fer-mer un fichier que l'on souhaite garder ouvert. Utile dans le Unload du projet pour s'assurer que tous les fichiers sont bien ferms la sortie du programme

    IV - Accs squentiel

    Un fichier en accs squentiel permet d'accder des fichers dont la structure est compose de lignes de texte, toutes finies par le code ASCII retour chariot + saut de ligne soit char(13) + char(10) en VB. Soit vbCrlf (constante existante dans VB pour VB Carriage return, line feed) dans tout ce qui va suivre. Il y a 3 modes d'accs squentiel : - Input : lecture seule - Output : accs en criture, un tel accs dtruit le contenu prcdant. - Append : accs en criture aprs le contenu actuel.

    Nous allons faire un petit visualiseur de fichier .ini . Pour cela, on va lire lignes par lignes le fichier et placer le contenu dans un textbox nomm textini. On lit une ligne grce la commande Line input. On utilise aussi la commande EOF pour savoir si l'on est arriv la fin du fichier, une lec-ture au del n'tant pas possible et provoquerait une erreur.

    Dim nextline as string dim canal as byte

    Canal = Freefile Open 'fichier.ini' For Input as #canal Do until EOF(canal) Line Input #canal, nextline textini.text = textini.text + nextline + vbcrlf Loop Close canal On pourra alors rcuprer le contenu de la ligne, connaissant la structure d'un fichier ini :

    [Rubrique] mot_clef=valeur Grce une fonction utilisateur : Function lectureINI(rubr As String, motclef As String) As String Dim pos1, pos2, pos3 canal = FreeFile

    Universit de Valenciennes - La Programmation en Visual Basic par MARLIN B.

    MB Page 2

  • Open "fichier.ini" For Input As canal Do Until EOF(canal) Line Input #canal, nextline inivar = inivar + nextline + vbCRLF Loop Close canal lectureINI = vbNullstring rubr = "[" + rubr + "]" pos1 = InStr(1, inivar, rubr) + Len(rubr) + 2 motclef = motclef + "=" pos2 = InStr(pos1, inivar, motclef) + Len(motclef) 'position du dbut de la rponse pos3 = InStr(pos2, inivar, Chr(13)) 'position de la fin de la rponse lectureINI = Mid(inivar, pos2, pos3 - pos2) End Function

    Qui s'utilise de la faon suivante : valeur = lectureNI("rubrique", "Motclef")

    On pourra ainsi crire et modifier un fichier ini : Function (ou sub) EcritureINI(rubr As String, motclef As String, param As string) dim canal as byte canal8 = FreeFile Open "fichier.ini" For Input As canal8 Do Until EOF(canal8) Line Input #canal8, nextline inivar = inivar + nextline + vbCRLF Loop Close canal rubr = "[" + rubr + "]" pos1 = InStr(1, inivar, rubr) + Len(rubr) + 2 motclef= motclef + "=" pos2 = InStr(pos1, inivar, motclef) + Len( motclef) pos3 = InStr(pos2, inivar, Chr(13)) inivar = Left(inivar, pos2 - 1) + param + Mid(inivar, pos3) Close canal = FreeFile Open "fichier.ini" For Output As canal Print #canal, inivar Close canal End Function

    Le dbut reprend lectureINI. Celle l s'utilise de la faon suivante : Newini = EcritureINI ("rubrique", "mot_clef", nouvelle valeur de typer chaine, ou str(valeur non chaine))

    V - Petit complment sur les fichiers sous VB Voici diverses commandes qui vous seront trs utiles pour peu que vous vouliez travailler avec des fichiers : - Filelen("nom et chemin du fichier cible") renvoie la taille du fichier spcifi. - Filecopy source, cible copie le fichier source en cible. - Kill ("nom et chemin du fichier cible") dtruit le fichier cible qui doit tre ferm, faites prcder de close) Ajouter shared dans la commande open permet de partager l'accs au fichier avec d'autres pro-cdures de l'application. Peut tre utile dans certains cas.

    Universit de Valenciennes - La Programmation en Visual Basic par MARLIN B.

    MB Page 3