Module d'import générique ######################### Format général des filtres ========================== .. code-block:: xml Filter ====== .. code-block:: xml Attributs : =============== ============== =========== Attribut Obligatoire Explication =============== ============== =========== name Oui Le nom du filtre tel qu'il apparaîtra dans la liste type Oui Le type de fichier : xls ou csv ou fix maxheader Non Le nombre de lignes où chercher les en-têtes (par défaut = 20) delim si type='csv' | Le délimiteur à utiliser (par défaut ","). | * `tab` ou `$09` pour les tabulations | * `auto` pour détection automatique engine Non | Le moteur de lecture à utiliser | * si type="xls" : "xlsrw" ou "cx" | * si type="csv" ou "fix" : "fileread[.encoding]" ou "memorymap" | (où encoding peut être UTF8, CP437, ANSI, ASCII) reconcile Non | Par défaut : "Non". Si le moteur de lecture est "fileread", | essayer de "recoller" les | lignes qui contiennent des retour chariot. unquote Non | Par défaut : "Non". | Nettoyer les champs s'ils commencent et finissent par des " =============== ============== =========== Zones ===== .. code-block:: xml .. tabularcolumns:: |l|c|j| .. table:: Liste des attributs de zones ========================= ============= ========================================================================== Attribut Obligatoire Explication ========================= ============= ========================================================================== name Oui Le nom du filtre tel qu'il apparaîtra dans la liste level Oui Le nom du niveau (facultatif si **clone**) col Oui La position où commence la zone (ou **auto** si ghregex) clone Non Nom de la zone à cloner parent Spécial Sur les imports multi-niveaux, définit le nom de la zone parente ghregex Non | Permet de repérer la zone (mettre col="auto") et de définir les champs | avec col=+0 ou col=+2 ========================= ============= ========================================================================== Lookups (tables de correspondances) =================================== .. code-block:: xml Champs (fields) =============== .. code-block:: xml .. tabularcolumns:: |l|c|j| .. table:: Liste des attributs de champs ====================== ============ =========== Attribut Obligatoire Explication ====================== ============ =========== name Oui Le nom du champ tel que défini par l'appelant col Oui La position du champ * numéro de colonne * colonne Excel (A-Z, AA, AB, etc.) * n,l : n = numéro de colonne, l=longueur (pour les types "fix") * +n : numéro de colonne relativement à la zone (+0 pour le premier champ) * auto : la colonne sera trouvée avec ghregex ghregex Non Regex de l'en-tête pour contrôle ou découverte (si col=auto) readasstring Non | Si "1" le champ sera lu/vu comme une chaîne jusqu'à son | enregistrement ce qui permet de lui appliquer des regex, | eval et autres helpers defaultvalue Non Valeur par défaut si le champ est vide forcedvalue Non Valeur du champ forcée optional Non "1" si le champ n'est pas systématiquement présent dans les fichiers checktype Non * regex * change checkregex Oui Si `checktype` = regex onfail Oui * null : le champ est nullifié * empty : le champ est vidé * ignorerec : l'enregistrement est ignoré * ignoretab : arrêt du traitement de l'onglet courant * fatalerror : le traitement est interrompu onfailmessage fatalerror | Message affiché en cas d'erreur fatale | (%s pour afficher un contenu capturé par la regex) acceptif Non | Raccourci pour | checktype=regex + readasstring + OnFail=IgnoreRec ignoreif Non | Raccourci pour | checktype=regex + readasstring + OnFail=IgnoreRec (regex=!regex) fatalif Non | Raccourci pour | checktype=regex + readasstring + OnFail=FatalError (regex=!regex) | Il est possible de préciser un **onfailmessage** fatalifnot Non | Raccourci pour | checktype=regex + readasstring + OnFail=FatalError + onfailmessage | Il est possible de préciser un **onfailmessage** keytype Non * primary : ce champ est unique et toujours présent * unique : ce champ est unique ou vide * fallback codetype si `keytype` Type de code à associer sticky Non La valeur du champ est mémorisée pour les lignes suivantes où cette valeur serait vide isactivecol Non Colonne où vérifier isactiveregex isactiveregex Non regex à vérifier pour que la ligne soit prise en compte fillbeforeheadersfound Non | "1" pour les champs Sticky dont les valeurs sont | définies avant que tous les en-têtes aient été trouvés clearhelpers Non Pour les zones clonées, "1" supprime les helpers hérités ====================== ============ =========== Contrôles --------- Avant de prendre en compte une donnée, plusieurs contrôles peuvent être effectués : checkactive Permet de vérifier, à un autre endroit de la ligne, que le champ qu'on s'apprête à lire est bien celui qu'on croit. Sur les fichiers de type "fix", cela permet par exemple de s'assurer que le type d'enregistrement est celui attendu. check Permet de vérifier la validité de la donnée et de déterminer quoi faire dans le cas contraire (ignorer la ligne, le fichier ou interrompre le traitement si l'erreur rencontrée indique un fichier corrompu ou invalide) Les traitements sont effectués dans cet ordre : 1. Vérifier que le champ est bien défini (certains champs sont facultatifs) 2. Appliquer les helpers `checkactive` 3. Vérifier que le champ est bien actif (`checkactive`) 4. Appliquer les helpers `afterread` 5. Vérifier la validité de la donnée (`check`) 6. Appliquer les helpers `beforepost` Helpers ======= .. code-block:: xml When ---- .. glossary:: afterheaderread N'est utilisé que dans la phase de recherche d'en-têtes, avant de vérifier si ceux-ci répondent au(x) critère(s) attendu(s). beforecheckactive Traitement appliqué aux champs `checkactive` (donc généralement pas le champ lui-même mais peut être utilisé pour opérer une transformation de la donnée uniquement aux fins de vérification en la gardant intacte) afterread Effectué avant de vérifier la conformité de la donnée beforepost Effectué après vérification de conformité mais avant stockage userdefined Non utilisé actuellement Types ----- .. glossary:: lowercase Force le champ en minuscules. uppercase Force le champ en capitales trim Élimine les espaces de début et de fin (déjà fait à la lecture du champ) lpad remplit à gauche avec un caractère pour atteindre une longueur prédéfinie. Si le champ est déjà trop long, il est tronqué. :fill: caractère à utiliser pour combler :length: longueur à atteindre rpad remplit à droite avec un caractère pour atteindre une longueur prédéfinie. Si le champ est déjà trop long, il est tronqué. :fill: caractère à utiliser pour combler :length: longueur à atteindre round2 Arrondit le champ (float) à 2 chiffres après la virgule round8 Arrondit le champ (float) à 8 chiffres après la virgule eval Évaluation mathématique du champ (par exemple ``100/2``) regex Recherche un motif et le remplace par une chaîne. Les portions isolées par des parenthèses sont remplacées par `$1`, `$2`, etc. :find: motif à rechercher :replace: chaîne par laquelle remplacer regexeval Combine `regex` et `eval`. Par exemple : :find: ``^(.*)$`` :replace: ``$1/2`` regexelse Recherche le motif `find` et remplace **l'ensemble de la chaîne** par `replace` en cas de succès ou par `else` en cas d'échec ou de champ vide/nul. :find: motif à rechercher :replace: chaîne par laquelle remplacer :else: chaîne alternative split Récupère le N-ième élément en séparant le champ lu sur un ou plusieurs caractères :splitchars: un ou plusieurs caractères qui serviront à séparer les éléments :count: le N-ième élément à récupérer userdefined Permet au module appelant (ImportCatalogues) de définir un helper particulier à appliquer juste avant d'enregistrer les données. :udname: nom du helper qui sera reconnu par l'appelant lookup Permet de transformer une valeur lue par une autre, définie dans une table de correspondance :lookup: nom de la table de correspondance concat Concatène deux champs (avec un éventuel séparateur) :addfield: champ à ajouter au champ courant :separator: séparateur à ajouter (facultatif) Code ==== Actuellement, chaque zone peut avoir un code associé, placé dans une directive ````. Outre le langage Pascal standard, les fonctions suivantes sont disponibles : .. glossary:: getstring(name) getinteger(name) getfloat(name) Récupère la valeur d'un champ :name: nom du champ à récupérer putstring(name,value) putinteger(name,value) putfloat(name,value) Stocke des données dans un champ :name: nom du champ :value: valeur à stocker TestRegex(str,expression,options:String):Boolean Vérifie si une chaîne matche une expression régulière :str: chaîne à tester :expression: regex :options: "i" pour ignorer MAJ/min Eval(str):Integer DEval(str):Double Convertit une chaîne en nombre (ou zéro si la chaîne ne représente pas un nombre) GetLastSerial(level:str):Integer Retourne la dernière clé primaire pour le niveau indiqué Reload(zonename:str; index:integer) Recharge les champs de la zone **zonename** avec les données de la clé primaire **index** Resave Écrase les données de l'enregistrement rechargé (avec **Reload**) après modifications abortzone Invalide les données de la zone, comme si un *check* avait échoué et retourné **ignorerec** abortthisline Non implémenté abortwholefile Interrompt le traitement du fichier entier debug(text) Écrit sur la console lorsque l'utilisateur a choisi de voir les informations de débogage log(text) Écrit sur la console