Elle ouvre un fichier sur le disque CreateFile(...)
Elle crée ensuite une clé d'accès
(MakeAgendas1Key(...)
). Cette clé d'accès
va permettre de 'parcourir' (lire les éléments
les uns après les autres), dans l'ordre souhaité.
Cette clé est de type AGENDAS1X, le premier paramètre
est le nom d'utilisateur, suvi de la date de l'élément
dans l'agenda suivi de l'heure.
Cette clé indique qu'on va parcourir le fichier Agenda,
selon l'ordre des utilisateurs, puis ensuite l'ordre des dates, puis
l'ordre des heures.
Exemple de parcours suivant utilisateur-date
- [Utilisateur] [Date] [Heure]
- Pierre 05/04 13:15
- Pierre 05/04 18:15
- Pierre 15/04 13:15
- Vincent 02/04 11:00
En utilisant un autre type de clé, on aurait pu parcourir
le fichier selon d'autres critères.
On construit cette clé en indiquant l'utilisateur actuel, la
date du jour et l'heure 00:00.
On parcourt ensuite le fichier par HDBrowseKey(...),
on
lui indique le type de clé (type AGENDA1X) et la clé
elle même. La fonction va retourner une position dans le fichier.
Il est à noter que l'enregistrement [utilisateur] [date du
jour] 00:00 n'existe probablement pas. HDBrowseKey(...)
va
prendre l'enregistrement suivant disponible. On aurait utilisé
HDFindKey(...),
cette fonction aurait recherché
un enregistrement exact et n'aurait rien retourné si il n'existait
pas.
On part ensuite dans une boucle, qui va durer tant que l'on trouve
des données correctes.
while (index){
}
On lit l'enregistrement par HDReadRec(...);
On vérifie que cet enregistrement appartient toujours au bon
utilisateur. Il ne faut pas oublier que l'on parcourt le fichier dans
l'ordre des utilisateurs, puis des dates puis des heures. Une fois
l'ensemble des heures écoulées pour une journée,
on passe à la journée suivante. De même une fois
l'ensemble des journées écoulées on passe à
l'utilisateur suivant. Il faut donc s'arrêter à temps.
On teste que le nom de l'utilisateur est toujours le bon, si il n'est
pas bon, on a fini et donc, on met index à 0, ce qui
fera sortir de la boucle.
Si l'enregistrement est correct, on enregistre les données
dans un fichier (wsprintf(...)
et WriteFile(...)
).
On ne dispose pas du nom du patient, mais de son N° de fiche.
C'est pour cela qu'il était nécessaire d'ouvrir le dossier
Patients aussi.
Faut-il recréer une clé de recherche sur le patient
(MakePatients
xKey
) en chercher
la représentation exacte (HDFindKey(...)
)
et ensuite lire l'enregistrement ?
Non il y'a plus simple dans ce cas : ReadPatients (...)
Cette fonction va lire un enregistrement Patient, selon
un critère (ici PATIENTS_BY_REC), c'est à dire
qu'elle va retourner l'enregistrement correspondant au N° de fiche
donné en entrée.
On a alors toutes les informations nécessaires, il ne reste
plus qu'à se déplacer à la clé suivante
par HDNextKey(...)
;