Cours COBOL et la cinématique des fichiers, tutoriel & guide de travaux pratiques en pdf.
Un nouveau jeu de primitives
Nous montrons, dans ce paragraphe, les limites des primitives de manipulation de fichiers séquentiels classiquement utilisées, puis proposons de les remplacer par un nouveau jeu. Après avoir montré comment exprimer les nouvelles par les anciennes, nous en donnons une implémentation COBOL. Nous les appliquons ensuite à deux cas, celui d’un fichier unique avec erreurs et celui d’un fichier constitué de deux fichiers sans erreur. Dans les deux cas, il s’agit de procéder à l’impression des contenus. Dans les deux cas, le fait de se servir des nouvelles primitives réduit au strict nécessaire les modifications. Une conclusion termine le paragraphe.
Les primitives anciennes
Lorsque l’on veut lire un fichier séquentiel, on utilise habituellement un jeu de primitives qui ressemble à celui-ci!:
• Ouvrir (f, lecture)
• Lire (f)
• ff (f)
• Fermer (f)
Elles ont l’effet suivant :
• Ouvrir (f, lecture) : associe le fichier au programme, l’ouvre (ie. rend disponible ses enregistrements et positionne le curseur sur le premier enregistrement).
• Lire (f) : rend l’enregistrement sur lequel pointe le curseur, puis déplace ce curseur d’un cran. Cette instruction n’est valide que si le curseur ne pointe pas sur la marque de fin de fichier.
• ff (f) : cette fonction renvoie la valeur vrai si le curseur est positionné sur la marque de fin de fichier.
• Fermer (f) : remet le fichier à disposition des autres utilisateurs.
Voici un algorithme typique :
Ces primitives se révèlent particulièrement bien adaptées pour parcourir un fichier non trié ou bien encore un fichier trié sur une clé de degré 1. Elles se révèlent peu efficaces dans tous les autres cas et notamment :
• quand on doit traiter les séquences qui sont associées à des références qui ne sont pas une clé ;
• quand le fichier à parcourir est composé de plusieurs fichiers ;
• …
Dans la mesure où nous voulons disposer de procédures standard, il nous faut changer ce jeu de primitives et en adopter un autre.
Les nouvelles primitives
Avant d’introduire ces primitives, nous devons faire une hypothèse :
Nous supposons que, pour tout attribut de la relation, il existe un majorant et que cette valeur ne peut être utilisée pour constituer un n-uplet. Nous appelerons sentinelle le n-uplet composé des majorants de chaque attribut.
Le principe qui régit le nouveau jeu de primitives est le suivant :
• il y a toujours une lecture par anticipation, ce qui permet de détecter la fin d’une séquence avant de commencer la suivante.
• la lecture de la marque de fin de fichier correspond à un chargement de la sentinelle dans le tampon du fichier.
Moyennant tout ce qui précède, les nouvelles primitives peuvent être définies ainsi :
• Ouverture (f) : ouvre le fichier en mode lecture et appelle la procédure Lecture.
• Lecture (f) : rend l’enregistrement sur lequel pointe le curseur, puis déplace celui-ci d’un cran. Si le curseur pointe sur la marque de fin de fichier, place la sentinelle dans le tampon.
• maxind (f) : rend la valeur vrai si le tampon contient la sentinelle.
• Fermeture (f) : ferme le fichier.
Le parcours d’un fichier séquentiel devient alors :
La différence entre cet algorithme et le précédent peut sembler minime (lire puis traiter dans un cas, traiter puis lecture dans l’autre). Elle est néanmoins capitale, comme nous allons le montrer dans les paragraphes suivants et nous ne saurions trop recommander aux apprentis programmeurs et aux programmeurs de jeter l’ancien jeu au profit du nouveau.
Les nouvelles par les anciennes
Il est aisé de définir chaque primitive nouvelle en fonction des anciennes :
Implémentation en COBOL
Il est également aisé de proposer des implémentations dans les langages de programmation. À titre d’exemple, voici comment on peut les instancier en COBOL.
La traduction en COBOL de ces primitives nécessite la mise en place de quelques élements. Nous faisons, en particulier, les hypothèses suivantes :
• le nom COBOL du fichier est F, celui de son tampon FTAMP.
• le majorant de tout attribut existe ; il s’agit de la constante figurative HIGH-VALUE.