Le premier site francophone dédié au développement Pocket PC


Utiliser les 'FileSystem Controls' (partie 3)
 
ec  

 

Partie 1
Partie 2
Partie 3

Dans cette 3ème partie, nous allons apprendre à travailler avec des fichiers texte organisés en enregistrements.

Un enregistrement texte...

Les fichiers organisés ainsi utilisent la même base que les fichiers texte (voir partie 2 de cet article). Une notion de champ est ajoutée à chaque ligne. On a donc des lignes composées d'un ensemble de champs. Les champs sont séparés par des virgules, les chaines sont placées avec des doubles quotes (") et les nombre tels quels. Ainsi, le champ suivant

Nom du site CodePPC
URL http://www.codeppc.com
Identification interne 4543

sera écrit dans le fichier :

"CodePPC","http://www.codeppc.com",4543

Chaque enregistrement est séparé du suivant par un retour à la ligne <CR><LF>

"CodePPC","http://www.codeppc.com",4543
"LudiPocket","http://www.ludipocket.com",2321
"iPAQParadise","http://www.ipaqparadise.com",5421234

Ecriture des enregistrements

La manipulation des fichiers s'effectue avec l'objet "File" des "FileSystem Controls", si vous ne savez pas ou plus comment instancier cet objet, reportez-vous aux parties 1 et 2 de cet article.

Chaque enregistrement est en fait un tableau contenant les valeurs des champs. Ainsi, pour l'enregistrement de CodePPC que nous avons vu en exemple plus haut, sa représentation en mémoire sera un tableau de 3 éléments :

Elément 0 de type "String" CodePPC
Elément 1 de type "String" http://www.codeppc.com
Element 2 de type numérique 4543

C'est la méthode "WriteFields" qui permet d'écrire d'un bloc un enregistrement. Il suffit de lui donner en paramètre le tableau à utiliser :

Dim wFile As FILECTL.File
Dim wLigne As Variant

Rem Instanciation de l'objet File
Set wFile = CreateObject("FILECTL.File")

Rem Ouverture du fichier en mode texte, écriture
Call wFile.Open("\My Documents\essai.txt", fsModeOutput, fsAccessWrite, fsLockReadWrite)

Rem Préparation du premier enregistrement et écriture
wLigne = Array("CodePPC", "http://www.codeppc.com", 4543)
Call wFile.WriteFields(wLigne)

Rem Préparation du 2ème enregistrement et écriture
wLigne = Array("LudiPocket", "http://www.ludipocket.com", 2321)
Call wFile.WriteFields(wLigne)

Rem Préparation du 3ème enregistrement et écriture
wLigne = Array("iPAQParadise", "http://www.ipaqparadise.com", 5421234)
Call wFile.WriteFields(wLigne)

Rem Fermture du fichier
Call wFile.Close

On peut remarquer que rien ne nous empêche d'écrire des enregistrements qui n'ont pas la même taille. Attention, pour un bon fonctionnement de ce style de fichiers, tous les enregistrements doivent avoir la même taille, sinon gros problèmes à l'horizon à la lecture !

Lecture des enregistrements

C'est la méthode "InputFields" qui effectue la lecture d'un fichier écrit par "WriteFields", cette méthode prend un paramètre qui est le nombre d'enregistrements à lire à la fois. Si vous faites des essais en faisant varier cette valeur vous allez vous rendre compte que même si le fichier est organisé en lignes séparées par un <CR><LF>, cette séparation est vue comme un séparateur de champs.

Ainsi, on peut dire que :

"CodePPC","http://www.codeppc.com",4543
"LudiPocket","http://www.ludipocket.com",2321
"iPAQParadise","http://www.ipaqparadise.com",5421234

est équivalent à :

"CodePPC","http://www.codeppc.com",4543,"LudiPocket"
"http://www.ludipocket.com"
2321,"iPAQParadise","http://www.ipaqparadise.com",5421234

à condition de dire que l'on veut lire les enregistrement par paquet de 3 !

Cette petite particularité nous indique clairement qu'il faut impérativement connaitre le nombre d'enregistrements par ligne logique (et non pas physique) lors de la lecture des infos.

Dim wFile As FILECTL.File
Dim wLigne As Variant       
Set wFile = CreateObject("FILECTL.File")       
Call wFile.Open("\My Documents\essai.txt", _
     fsModeInput, fsAccessRead, fsLockReadWrite)         
Do While Not wFile.EOF
 wLigne = wFile.InputFields(3)
 MsgBox wLigne(0) & vbCrLf & wLigne(1) & vbCrLf & wLigne(2)
Loop         
Call wFile.Close
         
Dans cet exemple de code, nous effectuons la lecture des enregistrements que nous avons précédement écrits en stipulant bien que chaque enregistrement est composé de 3 champs.

Conclusion de cette 3ème partie

A ce state, nous avons fait le tour de toutes les variantes des fichiers texte. Dans la prochaine partie nous allons voir comment utiliser des fichiers à accès aléatoire (Random access)...

Stéphane Sibué

 
       
   
 
   
Copyright 2001-2004 - Tous droits réservés
 
   

iPAQ est un produit de COMPAQ.
Visual Tools est un produit de Microsoft Corporation.
Toutes les autres marques et produits présents dans ces pages sont la propriété exclusive de leurs sociétés respectives.