LES FICHIERS LOGIQUES Un Fichier logique est un objet de type *FILE. Il possède une description et 1 ou plusieurs membres. CES MEMBRES NE CONTIENNENT PAS DE DONNEES, ils ne possèdent qu'un chemin d'accès qui pointe sur les données d'un ou plusieurs fichiers physiques. (index sous forme d'arbre binaire [bi-tree].) |
________ _________ PF1 <________> PF2 <_________> ! Desc ! ! ! !--------! !---------! ! FORMAT ! ! ! !--------! !---------! ! C.A. ! ! ! !--------! !---------! ! DONNEES! ! ! <________> <_________> ! ! !_________________! ! V ________ LF <________> ! Desc ! !--------! ! FORMAT ! !--------! ! C.A. ! <________> |
LES FICHIERS LOGIQUES VONT NOUS PERMETTRE : - d'avoir une clé différente du fichier physique, donc d'accéder dans un nouvel ordre aux enregistrements (programmation séquentielle indéxée) - de regrouper les données de plusieurs fichiers physiques - de sélectionner une partie des enregistrements d'1 ou plusieurs fichiers physiques. |
Une Clé différente du fichier physique -------------------------------------- Prenons l'exemple du fichier CLIENTP1 ci-dessous. ************************ * FICHIER CLIENTP1 ************************ A REF(REPERTP1) A R CLIENTF1 TEXT('FORMAT DU FICHIER CLIENTP1') A NOCLI R A NOM01 R A ADR01 R A ADR02 R A CODPS R A CODEX R A CRLIM R A TOTAL R A K NOCLI |
MAINTENANT JE VEUX CREER UN CHEMIN D'ACCES SUR CES DONNEES DANS L'ORDRE DES NOM DE CLIENT (ZONE NOM01). J'APPELLERAI CE FICHIER LOGIQUE CLIENTL1. Voici sa description: ************************ * FICHIER CLIENTL1 ************************ A R CLIENTF1 PFILE(CLIENTP1) A K NOM01 ^ ! ! ----------------------- FONCTION NIVEAU FORMAT INDIQUANT LE NOM DU FICHIER PHYSIQUE SUR LEQUEL POINTE LE FICHIER LOGIQUE. |
CE FICHIER N'A PAS DE DESSIN D'ENREGISTREMENT, MAIS A LE MEME NOM DE FORMAT QUE LE FICHIER PHYSIQUE =====> IL A LA MEME DESCRIPTION DE ZONES QUE LE FICHIER PHYSIQUE REGARDONS MAINTENANT LE MEME EXEMPLE, MAIS CETTE FOIS-CI AVEC UN DESSIN D'ENREGISTREMENT DIFFERENT DU FICHIER PHYSIQUE. ************************ * FICHIER CLIENTL2 ************************ A R CLIENTF2 PFILE(CLIENTP1) A NOM01 A NOCLI A ADR01 A ADR02 A CODPS A K NOM01 |
CETTE FOIS-CI IL Y A UN NOM DE FORMAT DIFFERENT ====> JE DOIS INDIQUER LES ZONES FAISANT PARTIE DE CE FORMAT. (CE QUI PERMET, PAR EXEMPLE, DE NE "VOIR" QUE LES ZONES AUTORISEES A CERTAINS UTILISATEURS) Cette possibilité est intéressante pour des problèmes de confidentialité. En effet, c'est le physique qui possède les autorisations sur les données (réservoir des données), mais CHAQUE fichier(PF ou LF) possède ses propres droits niveau objet (donc des droits d'accès). Il est par conséquent possible : de limiter les autorisations sur le fichier physique (contenant TOUTES les informations) et d'autoriser l'accès à une vue plus réduite des données par le biais de logiques avec redéfinition de format. |
IL EST POSSIBLE DE FAIRE DES SELECTIONS D'ENREGISTREMENTS PAR LE BIAIS DES FICHIERS LOGIQUES. Cette sélection se fait au niveau chemin d'accès, après la définition des clés . Elle peut se faire en indiquant les enregistrements à sélectionner ( S en col. 17) en indiquant les enregistrements à ommettre ( O en col. 17) Puis en indiquant le nom de la zone sur laquelle porte le test et le test à effectuer (en col. 45), en utilisant COMP, RANGE, VALUES. * si département = 75 A S DEPT COMP(EQ 75) * si département compris entre 11 et 33 A S DEPT RANGE(11 33) * si département = 44 ou 49 ou 85 ou 35. A S DEPT VALUES(44 49 85 35) |
VOUS POUVEZ INDIQUER PLUSIEURS SELECTIONS, EN ETABLISSANT UNE RELATION "ET" ou bien UNE RELATION "OU". La relation "ET" se fait en laissant la col 17 à blanc. * si département = 75 et n° représentant = 1245 A S DEPT COMP(EQ 75) A NOREP COMP(EQ 1245) La relation "OU" se fait en renseignant la col 17. * si département = 75 ou compris entre 11 et 33 A S DEPT COMP(EQ 75) A S DEPT RANGE(11 33) Si vous combinez sélections et omissions, deux règles majeures: 1/ Dès que le système rencontre une sélection/omission VRAIE, il ARRETE les tests et sélectionne ou omet cet enregistrement. 2/ le système AJOUTE toujours en fin de sélection/omission une ligne A S/O ALL inverse de la précédente (S si précédente = O et inversement) |
Exemple: ! S DEPT COMP(EQ 75) ! O NOREP COMP(EQ 1245) O NOREP COMP(EQ 1245) ! S DEPT COMP(EQ 75) ! le système ajoute ! le système ajoute ! S ALL ! O ALL (sélection par dft) ! (omission par dft) Résultat: ! Résultat: -------- ! --------- sont sélectionnés ! sont sélectionnés ! - tous les clients dept = 75 ! - les clients ayant DEPT 75 (quelque soit NOREP) ! ET NOREP <> 1245. ! - tous les clients d'un autre ! (relation ET) réprésentant que 1245. ! ! (relation OU implicite) ! ! |
Un fichier logique permet aussi de faire de la fusion d'enregistrements. 1/ FORMATS IDENTIQUES. (ex fichiers comptables, en cours et historique) Il faut indiquer plusieurs fichiers physiques dans le mot-clé PFILE A R COMPTAF1 PFILE(COMPTAP1 COMPTAH) A K NOECR les deux fichiers doivent avoir le format COMPTAF1. 2/ FORMATS DIFFERENTS mais possédant des informations communes. ex: fichiers entête et lignes de commandes. !n° cde!client!date cde! !n° cde!n° li!code art.!quantité! ! ! !--------------- -------------------! | | entête-> !n° cde!client!date cde! puis lignes -> !n° cde!n° li!code art.!quantité! !n° cde!n° li!code art.!quantité! |
Il faut alors définir plusieurs formats (on parle de logique multi-formats) * fichier entêtes de commande A R ENTCDEF1 PFILE(ENTCDEP1) A K NOCDE * fichier lignes de commande A R LIGCDEF1 PFILE(LIGCDEP1) A K NOCDE Le classement se fera par n° de commande et pour en même n°, par ordre de déclaration des formats. Il est possible d'indiquer une clé secondaire pour l'un des formats (ici n° de ligne pour les lignes d'une même commande) * fichier entêtes de commande A R ENTCDEF1 PFILE(ENTCDEP1) A K NOCDE * fichier lignes de commande A R LIGCDEF1 PFILE(LIGCDEP1) A K NOCDE A K NOLI |
Si vous voulez fusionner plus de deux fichiers physiques. La clé PRIMAIRE doit être commune à tous les fichiers, cependant il est possible de classer les enregistrements d'un même fichier sur un critère qui leur soit propre. Ex: * fichier entêtes de commande A R ENTCDEF1 PFILE(ENTCDEP1) A !------> K NOCDE *!fichier lignes de commande A ! R LIGCDEF1 PFILE(LIGCDEP1) A !------> K NOCDE A ! K NOLI <----------! *!fichier commentaires ! A ! R COMCDEF1 ! PFILE(COMCDEP1) A !------> K NOCDE ! A K *NONE <---------!--- indique que la clé secondaire du A K NOCOM fichier commentaires n'est pas à comparer avec le numéro de ligne |
Le classement se fera donc par n° de commande pour un même numéro de commande 1/ l'entête 2/ toutes les lignes classées par n° 3/ tous les commentaires classés par n°. La lecture sequentielle de ce fichier simplifiera énormement le pgm d'édition de commande par exemple. S'il s'agit d'un pgm RPG il faudra utiliser les spécif I pour ce fichier afin d'associer à chaque FORMAT un indicateur d'entrée (var. booléenne) S'il s'agit d'un pgm COBOL le mot réservé DB-FORMAT-NAME contiendra automatiquement le nom du dernier format lu. La mise à jour d'un tel fichier est tout à fait possible. Il faut alors, indiquer le nom du format à mettre à jour. |