xRepair : Vérification de la structure des fichiers
Descriptif du programme xRepair
xRepair permet de vérifier la cohérence interne des fichiers de données au format Harmony (fichier de type N(ormal) ou fichier des données d'un fichier séquentiel indexé) et éventuellement de corriger les erreurs 001A (longueur d'enregistrement incorrecte).
Attention : xRepair élimine les erreurs 001A mais le contenu des enregistrements erronés est perdu. A la fin du programme, n'oubliez pas, le cas échéant, de régénérer les clés du fichier séquentiel-indexé par Xreof.
Mise en oeuvre du programme
Le principe de fonctionnement de xRepair est le suivant :
xRepair lit séquentiellement le fichier des données indiqué en entrée (attention : entrez le nom du fichier des clés s'il s'agit d'un séquentiel-indexé) et vérifie la longueur de chaque enregistrement lu.
On utilise le dictionnaire des données pour rechercher la longueur des enregistrements (cas d'un fichier à tailles d'enregistrement variables) ; si on trouve pas, on la cherche dans le fichier paramètres portant le nom xRepairF.TXT. Ce fichier peut contenir la "description" d'un ou plusieurs fichiers et peut être garni soit manuellement (avant d'appeler xRepair), soit automatiquement par le programme. Rappel : Xtools permet d'indiquer, dans l'en tête d'un fichier physique, le nom du dictionnaire et le mnémonique du fichier dans le dictionnaire.
Chaque fichier déclaré dans xRepair peut être marqué "Complet" (ce qui signifie que toutes les longueurs d'enregistrement possibles sont indiquées) ou "Non complet" (ce qui signifie que certaines longueurs d'enregistrement peuvent manquer). Attention : xRepair n'autorise le mode de correction automatisée que sur un fichier marqué "Complet". Remarque : il peut être intéressant de passer xRepair une première fois sur tous les fichiers (intègres) de vos applications, afin de constituer (définitivement) le fichier xRepairf.txt. Un fichier xRepairf.txt entièrement constitué est d'ailleurs nécessaire si vous désirez piloter régulièrement l'utilitaire Xverif.
Lorsque xRepair rencontre une longueur d'enregistrement non spécifiée dans xRepairf.txt ET que le fichier traité est marqué "non complet", il demande si cette longueur doit être ajoutée au fichier paramètres. En cas de réponse positive, il complète xRepairf.txt avec cette nouvelle longueur et poursuit la lecture.
Si le fichier traité est marqué "complet" ou en cas de réponse négative, xRepair considère que l'enregistrement lu est incorrect et que le fichier doit être corrigé. Remarque : si la question n'est pas posée (fichier marqué "complet"), vérifiez la longueur et le contenu de l'enregistrement affiché par xRepair et supposé erroné (au cas où cette longueur aurait été "oubliée" dans xRepairf.txt) ; si la longueur s'avère finalement correcte, abandonnez le programme, rajoutez manuellement cette longueur dans le fichier xRepairf.txt et relancez xRepair.
Correction des erreurs
La correction d'une erreur peut se faire de trois manières :
Correction automatisée. Avec cette méthode, xRepair invalide automatiquement les caractères n'appartenant pas à des enregistrements corrects.
Correction semi-automatique par pointage. Cette méthode consiste à repérer "visuellement" le premier enregistrement correct qui suit l'erreur et à se positionner sur sa longueur. Après validation, xRepair corrige automatiquement le fichier en invalidant les octets compris entre l'erreur et l'enregistrement pointé (il crée un ou plusieurs enregistrements à espace).
Correction manuelle. Cette méthode permet de modifier directement le contenu du fichier (y compris les octets " système ").
Correction automatisée
Avec cette méthode, xRepair corrige automatiquement les erreurs en invalidant les caractères n'appartenant pas à des enregistrements corrects.
Si vous optez pour cette méthode, cliquez sur le bouton Correction automatisée.
Rappel : xRepair n'autorise la correction automatisée que si le fichier est marqué "Complet" (Cf. rubrique Descriptif du programme xRepair).
A la fin du programme, n'oubliez pas de régénérer les clés du fichier par Xreof.
Correction manuelle
La méthode de correction manuelle consiste à modifier directement le contenu du fichier (et en particulier la ou les longueurs d'enregistrement erronées), de manière à rétablir des enregistrements de longueur correcte (en respectant la structure Harmony des fichiers de type N). Elle est fortement déconseillée si vous ne maîtrisez pas parfaitement cette structure de fichiers.
Si vous optez pour cette méthode, cliquez sur le bouton Correction manuelle.
Après détection de l'erreur, xRepair affiche le contenu physique du fichier, par bloc de 256 caractères (à droite en Ansi, à gauche en Hexadécimal). Il se positionne au départ sur le premier octet physique (en général, l'octet " réseau ") du dernier enregistrement correct.
A partir de là :
Positionnez-vous sur l'erreur en cliquant sur le bouton Pointer longueur suivante (attention à ce que le curseur pointe bien le premier octet de la dernière longueur correcte). (Remarque : plus généralement, vous pouvez progresser d'un enregistrement dans le fichier en plaçant le curseur sur le premier octet de la longueur d'un enregistrement correct, puis en cliquant sur le bouton Pointer longueur suivante.)
La nouvelle longueur pointée est incorrecte. Vous devez maintenant parcourir le fichier pour repérer les "bons" enregistrements et rétablir entre eux un "chaînage" correct. Vous devez bien entendu respecter la structure Harmony du fichier et vous ne devez pas "créer" des enregistrements dépassant 4 Ko. Remarque : si vous devez "créer" des enregistrements "sur" des données incorrectes, il faut les mettre à espace. Les touches de parcours sont listées ci-dessous.
Les modifications sont faites manuellement. Tous les octets du tableau sont modifiables, à droite en Ansi, à gauche en Hexadécimal. Pour vous aider à saisir une longueur d'enregistrement, placez le curseur à l'endroit où doit se trouver le premier octet de la longueur et tapez la touche F6 : vous pouvez alors saisir une valeur en décimal (qui sera automatiquement convertie en binaire et placée dans la longueur pointée).
Pour valider les modifications faites dans un bloc, tapez la touche F10. Après confirmation, le bloc est immédiatement réécrit sur disque et le programme repasse en mode consultation sur le bloc suivant. Pour modifier ce bloc, cliquez à nouveau sur le bouton Correction manuelle.
A la fin des corrections, tapez à nouveau F10 (en mode consultation). xRepair poursuit alors son traitement à la recherche d'une éventuelle nouvelle erreur.
Attention : Si la taille des enregistrements du fichier est fixe et si vous avez du "créer" un enregistrement de longueur différente, il est conseillé (impératif si vous faites des accès directs à ce fichier), après correction de toutes les erreurs, de recopier le fichier dans un nouveau fichier à même taille d'enregistrements fixe. Utilisez pour ce faire le choix de Xtools Fichier : Copier un fichier, en renseignant les champs Premier et Dernier enregistrement, afin de forcer la méthode de copie "partielle".
A la fin du programme, n'oubliez pas de régénérer les clés du fichier par Xreof.
Touches de parcours du fichier
Flèches | Déplacement du curseur dans le bloc courant. |
Home / End | Début / Fin de bloc. |
F2 | Passage au bloc suivant. |
Shift+F2 | Retour au bloc précédent. |
F7 ou bouton Pointer longueur suivante | Positionnement sur la longueur du prochain enregistrement. Attention : avant de taper F7, assurez-vous d'être placé sur une longueur d'enregistrement correcte. La valeur décimale correspondant à l'octet courant et à son suivant est affichée en haut à droite (zone Longueur pointée). |
Shift+F8 | Retour sur le bloc affiché lors de la détection de l'erreur. |
Autres touches
Tabulation | Zone Ansi <=> Zone Hexadécimale. |
F1 | Appel de l'aide. |
F6 | Saisie d'une longueur en décimal. |
F9 | Abandon de l'opération. |
F10 | Validation des modifications. |
Valeurs affichées
Fichier | Nom du fichier traité. Sous le nom du fichier, est indiqué son type (Normal fixe si la taille des enregistrements est fixe, Normal variable sinon). |
Pos | Position courante dans le bloc de 256 octets. |
Octet | Emplacement dans le fichier du premier des 256 octets du bloc affiché. |
Taille enreg | Taille des enregistrements du fichier (0 si taille variable). |
Longueur pointée | Valeur décimale correspondant à l'octet courant et à son suivant. |
Le fichier paramètres xRepair.txt
Le fichier paramètres xRepairf.txt est un fichier texte contenant :
Une ligne par fichier susceptible d'être contrôlé.
Lignes précédées d'une première ligne précisant la version du fichier xRepairf.txt lui-même. En effet, xRepair sait gérer les différentes versions d'un même fichier à contrôler.
Structure d'une ligne « fichier »
Flag_complet, Nom_du_fichier, lg_enregistrement [,lg_enregistrement]*
Flag_complet | C ou c indique que le fichier est marqué "complet", ce qui signifie que toutes les longueurs d'enregistrement possibles pour ce fichier sont indiquées. Tout autre caractère indique que le fichier est marqué "non complet", ce qui signifie que certaines longueurs d'enregistrement peuvent encore manquer. |
Version | Numéro de version du fichier. Si l'on ne désire pas gérer le numéro de version, on laissera ce champ vide (ó ,, ou , ,). |
Nom_du_fichier | Nom du fichier (nom du fichier des clés s'il s'agit d'un séquentiel-indexé). |
lg_enregistrement | Longueur(s) d'enregistrement. |
Exemple :
;XREPAIRF.TXT_VERSION 6.1 C,6.1,GTFAT.dhfi,300,400,550,1100 (complet, version 6.1) ,,fichier1.dhfd,1000 (non complet, pas de version) N, ,fichier2.dhfi,500,120,250,800 (non complet, pas de version)
Correction semi-automatique par pointage
La méthode de correction par pointage consiste à repérer "visuellement" le premier enregistrement correct qui suit l'erreur et à se positionner sur sa longueur. Si vous optez pour cette méthode, cliquez sur le bouton Correction par pointage.
Après détection de l'erreur, xRepair affiche le contenu physique du fichier, par bloc de 256 caractères (à droite en Ansi, à gauche en Hexadécimal). Il se positionne au départ sur le premier octet physique du dernier enregistrement correct.
A partir de là :
Positionnez-vous sur l'enregistrement erroné en cliquant sur le bouton Pointer longueur suivante (attention à ce que le curseur pointe bien le premier octet de la dernière longueur correcte). (Remarque : plus généralement, vous pouvez progresser d'un enregistrement dans le fichier en plaçant le curseur sur le premier octet de la longueur d'un enregistrement correct, puis en cliquant sur le bouton Pointer longueur suivante.)
Cet enregistrement va probablement contenir des caractères "anormaux" (espaces, zéros binaires, …). Vous devez maintenant parcourir la suite du fichier jusqu'à repérer "visuellement" un enregistrement qui vous semble correct par son contenu. Les touches de parcours sont listées ci-dessous.
Lorsqu'un enregistrement correct est trouvé, placez le curseur sur le premier octet de sa longueur. La valeur décimale correspondant à l'octet courant et à son suivant est affichée en haut à droite (zone Longueur pointée) : assurez-vous que vous pointez bien la longueur de l'enregistrement, en vérifiant cette valeur.
Validez par F10. xRepair corrige automatiquement le fichier en invalidant les octets compris entre l'erreur et l'enregistrement pointé (il crée un ou plusieurs enregistrements à espace). Il poursuit ensuite à la recherche d'une éventuelle nouvelle erreur.
Attention : Si la taille des enregistrements du fichier est fixe (et si xRepair a été obligé de créer un enregistrement vide de longueur différente), le programme vous le signale : il est conseillé (impératif si vous faites des accès directs à ce fichier), après correction de toutes les erreurs, de recopier le fichier dans un nouveau fichier à même taille d'enregistrements fixe. Utilisez pour ce faire le choix de Xtools Fichier : Copier un fichier, en renseignant les champs Premier et Dernier enregistrement, afin de forcer la méthode de copie "partielle".
A la fin du programme, n'oubliez pas de régénérer les clés du fichier par Xreof.
Touches de parcours du fichier
Flèches | Déplacement du curseur dans le bloc courant. |
Home / End | Début / Fin de bloc. |
F2 | Passage au bloc suivant. |
Shift+F2 | Retour au bloc précédent. |
F7 ou bouton Pointer longueur suivante | Positionnement sur la longueur du prochain enregistrement. Attention : avant de taper F7, assurez-vous d'être placé sur une longueur d'enregistrement correcte. La valeur décimale correspondant à l'octet courant et à son suivant est affichée en haut à droite (zone Longueur pointée). |
Shift+F8 | Retour sur le bloc affiché lors de la détection de l'erreur. |
Autres touches
Tabulation | Zone Ansi <=> Zone Hexadécimale. |
F1 | Appel de l'aide. |
F9 | Abandon de l'opération. |
F10 | Validation du pointage. |
Valeurs affichées
Fichier | Nom du fichier traité. Sous le nom du fichier, est indiqué son type (Normal fixe si la taille des enregistrements est fixe, Normal variable sinon). |
Pos | Position courante dans le bloc de 256 octets. |
Octet | Emplacement dans le fichier du premier des 256 octets du bloc affiché. |
Taille enreg | Taille des enregistrements du fichier (0 si taille variable). |
Longueur pointée | Valeur décimale correspondant à l'octet courant et à son suivant. |
Structure des fichiers de type N
Lorsque Xtools affiche le contenu d'un enregistrement, seule la partie "utilisateur" est visualisée.
Physiquement sur le disque, chaque enregistrement est précédé de deux octets "système" qui contiennent la longueur de l'enregistrement (au format "naturel" : poids forts, poids faibles).
Physiquement, un fichier de type N a donc la structure suivante :
Longueur sur 2 octets. - Données sur Longueur octets.
Longueur. - Données.
Etc.
Une erreur de longueur d'enregistrement est détectée si la longueur lue :
Est différente de la taille des enregistrements du fichier (cas d'un fichier à taille d'enregistrements fixe).
Est nulle.
Est supérieure au nombre d'octets restants dans le fichier.
N'est pas présente dans le fichier paramètres.