FILE

Sommaire


Filepermet de déclarer l'ensemble des tables utilisables dans un traitement.

 

Syntaxe

   [Local ]Filedecl_fic [ ,decl_fic ]

 

Paramètres

Elément

Description

Restrictions

decl_fic

fichier [where_cl] [order_by_cl]

Dans un même ordreFile, on peut mélanger ces descriptions pour des fichiers différents.

fichier

Identification d'un fichier sous
une des formes suivantes :
(1) nom_d'OBJet [ classe ]
(2)
chaîne [ classe ]
(4) '='
expr_c [ classe ]
(5) classe
(6) '('liste_variables ')' From System expr_cAs classe

classe désigne l'abréviation d'un
fichier.
(5)
File classe le fichier doit être ouvert

chaîne

Constante chaîne de caractères contenant le nom du fichier.

Le fichier doit être accessible.

expr_c

Expression de type Char dont le résultat est le nom du fichier.

Aucune.

liste_variable

Liste de nom_de_variable séparés  par le caractère ',' désignant les champs du fichier.

Aucune.

where_cl

Voir instruction Where

Aucune.

order_cl

Voir instruction Order By

Aucune.

 

Exemples

  # Déclaration du fichier HISTORIQUE avec l'abréviation définie en
   # paramétrage, et du fichier CLIENT avec l'abréviation CLI.
   File HISTORIQUE, CLIENT [CLI]
  # Utilisation de 2 fichiers comptes issus de 2 comptabilités. COMPTA1
   #  et  COMPTA2  sont  des  noms  d'applications, mach1 est le nom d'un
   # serveur de table, 1801 est le numéro de service.
   File "mach1:1801@COMPTA1.COMPTES" [CPT1], "COMPTA2.COMPTES" [CPT2]
  # Déclaration du même fichier 2 fois sous des abréviations différentes
   # Ainsi on pourra avoir 2 enregistrements courants pour un même
   # fichier, et par exemple faire des liens du fichier sur lui-même
   File COMPTES [CPT1], COMPTES [CPT2]
  # Déclaration d'un fichier du poste client
   File "#@C:\x3\lan\Fra"
   # Déclaration de fichiers identifiés respectivement par une
   # abréviation (le fichier TOTO est donc nécessairement déjà ouvert),
   # le nom d'une application (GESCOM), un chemin d'accès et une
   # expression de type chaîne de caractères.
   File [TOTO], "GESCOM.CLIENTS", "/usr/adonix/table1", = FIC_SAISI
   # Déclaration de 13 fichiers déjà ouverts.
   File [A1],[A2],[A3],[A4],[A5],[A6],[A7],[A8],[A9],[AA],[AB],[AC],[AD]
   # Ouverture du fichier PRODUIT avec un ordre de parcours selon une
   # pseudo-clé et une sélection des enregistrements.
    LocalFile PRODUIT [PRO] Where [PRO]CLE >= "fzzz"
    & Order By Key A = [PRO]TRICA Desc
  # Calcul de la taille des fichiers du répertoire courant appartenant
   # au groupe adonix (sous Unix).
   File (D,L,P,G,T) From System "ls -l" As [SYS] Where [SYS]G = "adonix"
    For [SYS] : [L]TAILLE += val([F:SYS]T) : Next
  # Liste d'un répertoire (client sous DOS)
   File (NOMFIC) From System "@dir/b/o:n" As [DOS]
   For [DOS] : infbox [F:SYS]NOMFIC : Next
  # Dans un sous-programme, on veut éviter d'ouvrir un fichier déjà
   # ouvert ( gain de temps et de nombre de fichiers ouverts).
   If clalev( [F:CLIF] ) = 0: LocalFile CLIFAC : Endif

 

Description et commentaires

Filepermet de déclarer les tables utilisées dans un traitement.

Un fichier peut être identifié par :

Par convention, le poste client est désigné par le serveur #.

Si le nom est donné, le fichier est d'abord recherché dans l'application courante, puis, s'il ne s'y trouve pas, il le sera successivement dans les applications de référence.

L'abréviation utilisée lors des opérations sur ce fichier sera celle donnée en paramétrage sauf si elle est précisée dans l'ordre File.

 

Déclaration d'un fichier ouvert (syntaxe 5)

La syntaxe File classe permet de re-déclarer un fichier ouvert au préalable par File; ceci permet de ne pas perdre l'enregistrement courant.

 

Déclaration d'un fichier de type System (syntaxe 6)

Un fichier de type System est un fichier temporaire, séquentiel, résultat de l'exécution de la commande unix passée en paramètre. Il est accessible comme tout fichier séquentiel indexé mais en lecture uniquement. Seuls les modes de lecture Curr, First, Last, Next et Prev sont possibles; on ne précisera pas de clé. On peut utiliser les boucles de lecture par For.

La clause Where se définit comme pour les autres fichiers. La clause Order by est interdite. Il n'y a pas de clé à proprement parler, et il est impossible d'en préciser une. L'ordre de parcours ascendant correspondant à celui qu'aurait eu l'affichage à l'écran.

Lors d'une lecture (par Read), Adonix s'arrête au premier caractère de fin de ligne rencontré (code interne 10), considéré comme séparateur d'enregistrements. Chaque enregistrement est 'découpé' en autant de champs que cela est indiqué dans la syntaxe de File, avec l'espace (ou tabulation ou plusieurs espaces) comme séparateur de champs (code interne 32). Il n'est donc pas tenu compte des variables [S]adxirs et [S]adxifs.

Les champs du fichier sont créés avec le type Char et une longueur de 255 caractères. Si trop de noms sont donnés dans la syntaxe, les champs 'inutiles' sont ignorés lors des lectures; s'ils sont en nombre insuffisant, les informations excédentaires sont ignorées.

Après une lecture (par Read ou For), la variable [S]fstat est mise à jour de la façon habituelle.

 

Déclaration des fichiers

La clause Where permet de restreindre l'accès aux enregistrements d'un fichier pour lesquels l'expression donnée est vérifiée. Précisons que cette expression (sauf dans le cas où c'est un champ du fichier) est évaluée à l'ouverture de la table ( contrairement aux versions précédentes ). La liste des opérateurs et fonctions utilisables dans l'expression est limitée. Se reporter à la documentation spécifique sur cette clause pour plus de détails.

La clause Order By permet de définir (ou de redéfinir) un index de parcours du fichier. Si cette clause existe, seule la clé y figurant sera utilisable. Se reporter à la documentation spécifique sur cette clause pour plus de détails. 

L'instruction File crée les classes de variables [F] et [G] et met à jour les variables [S]fileabre et [S]filename.

Filemet à jour la liste des tables ouvertes en remplaçant celles qui y étaient par celles définies dans l'instruction. La table mentionnée en premier dans l'ordre devient la table par défaut. Ceci pourra être modifié par l'instruction Default File.

Le nombre maximum de tables que l'on peut ouvrir simultanément est limité par la variable adonix [S]adxmto. La valeur de cette variable est habituellement fixée par un des traitements de nom APL.ini exécuté au lancement de l'application; mais rien n'empêche de modifier sa valeur dans un traitement. Elle ne pourra cependant jamais excéder 100.

Un ordre File referme toutes les tables ouvertes par un ordre File (ou Trbegin) précédent. Il est donc fortement conseillé d'ouvrir par Local File les tables d'un sous-programme si l'on ne veut pas modifier la liste des tables ouvertes, au retour au traitement appelant.

L'instruction Local File permet d'ouvrir des fichiers localement à un traitement ou un sous-programme et donc de façon temporaire. Une telle déclaration ne referme pas les fichiers qui auraient été ouverts précédemment par un ordre File ou Local File mais enrichit la liste des tables ouvertes. La première des tables ainsi ouverte deviendra la nouvelle table par défaut. Après l'ordre Close Local File (ou la fin du sous-programme), on retrouve la liste des tables telle qu'elle était avant cette instruction ainsi que les enregistrements courants.

Un niveau de localité est attaché à chaque fichier Local. Ainsi, il est possible de réouvrir par Local File et sous la même abréviation un fichier qui aurait déjà été ouvert ailleurs, par contre on ne peut pas le faire dans le même programme.

 

Remarques

Il est possible d'ouvrir un fichier par Local File à l'intérieur d'une transaction. Ce fichier sera automatiquement refermé à la fin de la transaction, mais jamais avant.

Il est théoriquement possible d'ouvrir un fichier par File à l'intérieur d'une transaction, mais les fichiers ouverts en écritures par Trbegin ne seront plus accessibles - même s'ils ne seront pas refermés physiquement avant la fin de la transaction.

Lorsque l'on utilise la syntaxe File nom_d'OBJet, Adonix recherche un fichier de ce nom dans les applications accessibles, puis en cas d'échec, il essaie de trouver une entrée de même nom dans la table des fichiers. On peut omettre le nom du serveur quand l'application est une des applications de référence de l'application courante.

Sur base de données, l'ouverture d'une table prend un temps non négligeable. On se limitera donc aux seuls fichiers indispensables et on évitera de réouvrir ceux qui le sont déjà.

Les fichiers temporaires créés lors d'un ordre File (fichier de tri ou fichier de type System) sont stockés dans le répertoire /tmp, à moins que la variable d'environnement TMPDIR ne comporte le nom d'un autre répertoire. Leurs noms sont générés de façon aléatoire. Ils sont accessibles uniquement par le processus courant et sont supprimés physiquement à la fin de de leur utilisation ou à la fin du processus.

Pour supprimer de la mémoire des tables ouvertes par File ou Local File, on utilisera les instructions Close File et Close Local File. Mais si on est à l'intérieur d'une transaction, ces tables ne seront réellement refermées qu'à la fin de celle-ci (Commit ou Rollback).

Un même fichier peut-être ouvert plusieurs fois (avec plusieurs niveaux de localité différents), avec chaque fois une nouvelle clause Where. Elle ne s'ajoute pas aux précédentes mais est rattachée à un niveau de localité et donc supprimée en fin de sous-programme. Ansi :
File FIC1 Where LIBELL = 4 : # un champ de type libellé
Call SBPRG
Read [FIC1]LIBELL First : Infbox num$(LIBELL) :
# affichera 4
...
Subprog SBPRG
Local File FIC1 Where LIBELL <> 4 :
# La condition contraire
Read [FIC1]LIBELL Last : Infbox num$(LIBELL) :
# affichera 255

Si on réouvrait le fichier avec la syntaxe File [abv] les clauses Where s'ajouteraient et la deuxième lecture échouerait.

La fonction nbrecord donne le nombre d'enregistrements de la table passée en paramètre (elle doit être ouverte).

Sous Oracle, on ne pourra pas - à priori - ouvrir une table d'une base autre que la base courante. Il peut aussi se poser des problèmes de droits d'accès propres à Oracle.

 

Erreurs associées

Erreur

Description

ERMODE(10)

Le nom du fichier n'est pas de type alphanumérique.

TROFIC(29)

Trop de fichiers ouverts simultanément.

PAFIC(20)

Fichier non trouvé.

ERCLAS( 7)

Abréviation non trouvée.

ERREOP(28)

Ouverture d'une même table 2 fois.

ERACCE(27)

Erreur d'accès au fichier (droits unix).

 

Mots-clés associés

TRBEGIN - WHERE - ORDER - ADXMTO - CLALEV - DEFAULT - CLOSE - FILTER - FOR - LINK - NBRECORD- FILEABRE - FILENAME


SOMMAIRE

Adonix X3(r) L4G
Copyright (c) Adonix 1999 - All rights reserved