Les fichiers et le traitement séquentiel des fichiers
Pour écrire des programmes pratiques nécessitant une quantité significative d'entrée de données, vous devez maîtriser l'utilisation des fichiers de données. Vous pouvez utilisé l'instruction INPUT pour saisir des données depuis le clavier dans vos programmes, mais dans des applications réelles, les données sont souvent saisies à partir de fichiers entreposés sur des disques. Il existe deux raisons importantes pour l'utilisation des fichiers. Premièrement, de nombreux utilisateurs doivent traiter des milliers ou des centaines de milliers d'éléments de données, beaucoup trop pour être saisis chaque fois qu'un programme est exécuté. Deuxièmement, les données produites par un programme peuvent devenir l'entrée d'un autre programme, éliminant ainsi le besoin de ressaisir les données manuellement.
Concepts de fichiers
Un fichier est une collection de données dans un format défini afin que les éléments de données individuels puissent être distingués. Un annuaire téléphonique est un exemple commun de fichier dans un format défini. Le format est : le nom à gauche avec le nom de famille en premier, le numéro de téléphone à droite et l'adresse entre le nom et le numéro; ces trois éléments sont à la même position (nom, adresse, numéro) pour chaque ligne dans la liste. Les noms individuels sont classés par ordre alphabétique.
Organisation des fichiers
Un champ est un élément de données unique dans le fichier. Chaque champ est composé de caractères. Un code produit, un prix d'achat et une date de transaction sont tous des exemples de champ. Chaque entrée ou enregistrement de l'annuaire téléphonique comporte trois champs : le nom, l'adresse et le numéro de la personne. Un champ peut être numérique ou chaîne à caractères. Un champ numérique peut être utilisé dans les calculs et peut contenir n'importe quelle combinaison de caractères. Un enregistrement est un groupe de champs contenant des données sur un individu, un objet ou un événement spécifique. Dans l'annuaire téléphonique, le nom, l'adresse et l'annuaire téléphonique d'une personne, ainsi que le nom, l'adresse et le numéro de téléphone de l'individu constituent un enregistrement. Notez que dans chaque enregistrement de l'annuaire téléphonique, les champs sont dans le même ordre&nbssp;: nom, adresse, numéro. Un fichier est une collection d'enregistrements associés, chaque enregistrement ayant les mêmes champs disposés dans le même ordre. Les fichiers courants dans les systèmes informatiques d'entreprise sont par exemple la paie, les comptes fournisseurs, les comptes clients et l'inventaire. La collection de chèques retournés est un fichier. Chaque chèque est un enregistrement composé des champs suivants : numéro de chèque, date, bénéficiaire, montant en caractères, montant numérique et numéro de compte. Bien que chaque chèque contienne des données différentes, tous les chèques ont le même format. Chaque champ du chèque est un ensemble de caractères numériques ou de chaîne de caractères.
Types de fichier
Les fichiers maîtres contiennent des données relativement permanentes. Un fichier de dossier étudiant est un exemple. Un dossier d'étudiant peut inclure des champs pour le nom, l'adresse, la classe, le nombre d'heures de crédit et la moyenne pondérée cumulative de l'élève. Un fichier d'inventaire est un autre exemple; les enregistrements du fichier d'inventaire comprennent normalement un numéro de produit, un coût, un prix, un emplacement et une quantité disponible. Les fichiers de transaction contiennent des enregistrements d'activité de données utilisés pour mettre à jour un fichier maître. Par exemple, à la fin de chaque semestre, de nombreux collèges créent un fichier de transactions contenant les données nécessaires avec les données nécessaires pour mettre à jour deux champs - moyenne pondérée cumulative et heures de crédit complétées - dans leurs fichiers étudiants. De même, des fichiers contenant des données sur les ventes et les transactions de commande sont nécessaires pour mettre à jour les fichiers d'inventaire.
Clefs d'enregistrement
Une clef est un champ dans un enregistrement identifiant l'enregistrement parce que sa valeur est unique à cet enregistrement ou indique que l'enregistrement appartient à une catégorie spécifique d'enregistrements dans le fichier. Les enregistrements du fichier maître ont au moins une clef unique distinguant cet enregistrement de tous les autres dans le fichier. Les numéros de chèque dans le fichier sont une clef unique. La sécurité sociale et d'autres numéros d'identification sont des clefs communes dans les fichiers commerciaux. La mise à jour d'un fichier maître d'étudiant fournit une illustration de l'utilisation de clefs n'étant pas uniques. Le fichier principal a un seul enregistrement pour chaque étudiant, et cet enregistrement est identifié par un numéro d'identification d'étudiant. À la fin de chaque semestre, le fichier maître est mis à jour avec de nouveaux rapports de notes. Un fichier de transaction contient un enregistrement pour chaque cours suivi par chaque étudiant. Si, par exemple, un étudiant, un étudiant a suivi cinq cours, le fichier de transaction contient cinq enregistrements de transaction avec le numéro d'identification de cet étudiant comme clef.
Accès aux fichiers
Les fichiers sont souvent désignés par la manière dont ils sont organisés et accessibles dans un système informatique. En général, les fichiers sont accessibles de manière séquentielle, aléatoire (directement) ou à l'aide d'un index. Si la majorité des enregistrements doivent être traités, l'accès séquentiel est généralement plus efficace. Si quelques enregistrements doivent être traités ou si les enregistrements sont traités dans un ordre aléatoire, un accès direct est nécessaire. Les enregistrements des fichiers séquentiels sont accessibles de manière séquentielle, en commençant par le premier enregistrement du fichier. Chaque enregistrement doit être entreposé ou récupéré dans un ordre consécutif. L'ordinateur ne peut pas accéder au 100e enregistrement d'un fichier séquentiel sans accéder au préalable aux 99 enregistrements précédents. Par exemple, la lecture des données du chèque numéro 2632 nécessite de lire d'abord les données des chèques 2626-2631. C'est le seul le type d'accès possible pour les fichiers entreposés sur bandes magnétique.
Les fichiers à accès direct ou aléatoire permettent un accès direct à n'importe quel enregistrement. Ils peuvent également être traités séquentiellement. Encore une fois, l'annuaire téléphonique est un exemple familier; vous pouvez accéder directement à n'importe quel nom du répertoire sans avoir à lire les noms précédents, ou vous pouvez commencer à partir du début du livre, en examinant chaque nom tour à tour. Les fichiers indexés sont accessibles directement à l'aide d'un index pour référencer les enregistrements dans un fichier. L'index sert de pointeur vers l'emplacement de l'enregistrement et permet à l'ordinateur de localiser l'enregistrement sans avoir à lire séquentiellement le fichier. Par exemple, pour trouver des informations sur le traitement des fichiers dans cette annuaire, vous pouvez d'abord vous référer à l'index, puis vous tourner vers le numéro de page indiqué. Cette méthode est beaucoup plus rapide que de démarrer sur la première page et de rechercher des informations sur le traitement des fichiers. Certains langages de programmation, y compris COBOL et RPG, prennent en charge l'organisation des index, mais la plupart des versions de BASIC ne le font pas. Une combinaison d'un fichier séquentiel, d'une table et d'un fichier aléatoire peut cependant être utilisée pour mettre en oeuvre des fichiers d'index dans QuickBASIC; la version 7.0 et les versions ultérieures de Professional BASIC de Microsoft prennent en charge l'organisation des fichiers d'index.
Instructions et fonctions d'entrée/sortie de fichier
Voici la liste des instructions et fonctions utilisées pour les entrées/sorties de fichier :
Tâche | Instruction ou fonction | Action |
---|---|---|
Créer un nouveau fichier ou accéder à un fichier existant. | OPEN | Ouvre un fichier pour récupérer ou entreposer des enregistrements d'entrées/sorties. |
Fermer un fichier | CLOSE | Termine les entrées/sorties sur un fichier. |
Entreposer des données dans un fichier | PRINT # | Entrepose une liste de variables en tant que champs d'enregistrement dans un fichier séquentiel ouvert précédemment. |
PRINT USING # | Similaire à PRINT #, sauf que PRINT USING # formate les champs d'enregistrement. | |
WRITE # | Entrepose une liste de variables en tant que champs d'enregistrement dans un fichier séquentiel ouvert précédemment. | |
WIDTH | Spécifie une longueur standard pour chaque enregistrement dans un fichier séquentiel. | |
PUT | Entrepose le contenu d'une variable définie par l'utilisateur dans un fichier binaire ou à accès aléatoire précédemment ouvert. | |
Récupération des données d'un fichier | INPUT # | Lit les champs d'un enregistrement et affecte chaque champ de l'enregistrement à une variable de programme (fichiers séquentiels). |
INPUT$ | Lit une chaîne de caractères dans un fichier. | |
LINE INPUT # | Lit un enregistrement à partir d'un fichier séquentiel et l'entrepose dans une seule variable de chaîne de caractères. | |
GET | Lit les données d'un fichier binaire ou à accès aléatoire et affecte les données aux éléments d'une variable définie par l'utilisateur. | |
Gestion des fichiers sur le disque | FILES | Affichage une liste des fichiers dans un répertoire spécifié. |
FREEFILE | Renvoie le prochain numéro de fichier disponible | |
KILL | Supprime un fichier du disque. | |
NAME | Modifie le nom d'un fichier | |
Obtenir des informations sur un fichier. | EOF | Teste si toutes les données ont été lues à partir d'un fichier. |
FILEATTR | Renvoie le numéro attribué par le système d'exploitation à un fichier ouvert et un numéro indiquant le mode dans lequel le fichier a été ouvert (INPUT, OUTPUT, APPEND, BINARY ou RANDOM). | |
LOC | Donne la position actuelle dans un fichier. Avec un accès binaire, il s'agit de la position d'octet. Avec un accès séquentiel, il s'agit de la position d'octet divisée par 128. Avec un accès aléatoire, il s'agit du numéro d'enregistrement du dernier enregistrement lu ou écrit. | |
LOF | Donne le nombre d'octets dans un fichier ouvert | |
SEEK (fonction) | Donne l'emplacement où la prochaine opération d'entrée/sortie aura lieu. Avec un accès aléatoire, il s'agit du numéro du prochain enregistrement à lire ou à écrire. Avec tous les autres types d'accès aux fichiers, il s'agit de la position d'octet du prochain octet à lire ou à écrire. | |
Se déplacer dans un fichier | SEEK (commande) | Définit la position d'octet pour la prochaine opération de lecture ou d'écriture dans un fichier ouvert. |
Programmes de traitement de fichiers
En général, il y quatre types de programmes de traitement de fichiers. Ils sont :
- Programmes de création
- Mettre à jour les programmes
- Rapports de programmes
- Programmes de recherche
Des programmes de création de fichiers sont nécessaires pour créer des fichiers maîtres et créer des fichiers de transaction. Les données sont saisies dans ces programmes puis formatées et écrites dans le fichier à créer. Ces programmes contiennent souvent des routines de validation des données pour vérifier que les données saisies sont correctes.
Les programmes de mise à jour des fichiers conservent les données des fichiers maîtres à jour. Il existe deux types généraux de programmes de mise à jour : la publication et la maintenance des fichiers. La publication est le processus de modification de la valeur d'un ou de plusieurs champs dans un enregistrement. Un exemple d'écriture est la rédaction d'un chèque et l'ajustement du solde en soustrayant le montant du chèque. La maintenance des fichiers est le processus d'ajout, de suppression et de modification d'enregistrements dans un fichier maître. Un dossier d'étudiant universitaire en est un bon exemple. Il doit être continuellement entretenu au fur et à mesure que de nouveaux étudiants sont admis au collège, que les anciens étudiants obtiennent leur diplôme ou le quittent, et que d'autres changent d'adresse et de numéro de téléphone.
Les programmes de rapport produisent des rapports basés sur les données d'un fichier. Les rapports peuvent contenir une liste de tous les enregistrements du fichier ou un résumé des données. Les rapports peuvent également être classés par heure. Certains rapports sont produits à des heures planifiées et d'autres sont produits uniquement à la demande.
Les programmes de recherche permettent un accès immédiat à un enregistrement particulier dans un fichier. Exemple de fichier, un caissier de banque peut avoir besoin de voir le solde actuel d'un client, ou le registraire peut avoir besoin de voir si un étudiant a suffisamment de crédits pour obtenir son diplôme.
Compatibilité des fichiers
Les programmes de traitement de fichiers sont rarement utilisés de manière isolée. Ils doivent souvent être capables de lire les données d'un fichier créé par un autre programme et d'écrire des données dans un fichier pour qu'un autre programme les utilise. Pour que cela se produise, la conception des champs et des enregistrements dans les différents fichiers doit être coordonnée afin que les programmes produisent des fichiers compatibles.
Un exemple de programme utilisant un fichier séquentiel pour l'entrée
Pour supporter le traitement des données à partir d'un fichier séquentiel, considérez le problème suivant : «M. Tremblay de Rocher et Tremblay, avocats, a demandé une liste du nom des clients du cabinet. Le fichier client contient les numéros de compte client et les noms de client. Le rapport imprimé de M. Tremblay doit comprendre un entête, une liste à simple interligne des noms des clients et un message de fin de rapport».
Pour un rapport imprimé comme celui-ci, un graphique imprimé, comme un formulaire de conception d'écran, est un outil de conception utile. Le nombre en haut du graphique fait référence aux positions sur la ligne d'impression sur la page. Les imprimantes peuvent avoir de 30 à 144 positions d'impression ou plus. Certaines imprimantes ont également des tailles de caractères variables et le nombre d'espaces qu'elles impriment normalement 80 caractères par ligne, mais la plupart peuvent également imprimer dans un mode condensé autorisant 132 caractères par ligne. Le compromis pour les caractères supplémentaires est une lisibilité réduite. Un rapport comporte généralement trois catégories de lignes. Les lignes d'entête sont imprimées en haut pour titrer le rapport et identifier les colonnes d'informations. Les lignes de détail sont celles imprimées chaque fois qu'un cordon est traité. Les lignes de résumé apparaissent à la fin d'un rapport (ou d'une section d'un rapport) après que les enregistrements d'un fichier (ou d'une partie de celui-ci) ont été traités. Ils peuvent inclure des totaux numériques et des messages de fin de rapport.
Pour le rapport Rocher et Tremblay, vous devez concevoir un entête simple, les lignes de détail du corps du rapport et un message de fin de rapport. La ligne d'entête du graphique d'impression se compose des lettres réelles à imprimer. Une ligne vide sépare la ligne d'entête des lignes de détail. Les détails commencent à la ligne 3 du rapport. Le X apparaît dans chacun des 20 blocs où les données peuvent être imprimées. Il y a 20 X car un maximum de 20 caractères est autorisé dans ClientName$. Un X indique qu'un caractère peut être imprimé à une position. Les caractères réellement imprimés dépendent du contenu du fichier.
Les trois lignes de X sur le graphique d'impression indiquent que plus d'une ligne sera probablement imprimée, mais le nombre de lignes imprimées dépend du nombre d'enregistrements traités. Les trois lignes consécutives de X indiquent également que les lignes de détail sont à simple interligne. Le message de fin de rapport est espacé d'une ligne au-delà de la dernière ligne de détail et les lettres à imprimer sont placées dans les blocs du graphique d'impression. Après avoir terminé la conception, vous demandez à M. Tremblay de revoir vos plans pour vous assurer que c'est bien le rapport qu'il souhaite. Dans ce cas, il convient que le rapport est effectivement ce dont il a besoin et il vous félicite pour votre bon travail.
Le fichier d'entrée pour la liste des clients Rocher et Tremblay est un fichier séquentiel d'enregistrements avec les champs ClientAcct$ et ClientName$, dans cet ordre. Le nom du fichier est CLIENT.SEQ. Le champ du nom du client ne doit pas dépasser 20 caractères, mais les noms peuvent contenir plus de 20 caractères. Le champ du numéro de compte client, n'étant pas utilisé dans ce programme, comporte 3 caractères. Description de l'échantillon d'un enregistrement pour CLIENT.SEQ :
Nom du champ | Longueur des données | Type de données |
---|---|---|
ClientAcct$ | 3 | Chaîne de caractères |
ClientName$ | 20 | Chaîne de caractères |
Le tableau suivant répertorie un ensemble d'exemples d'enregistrements dans le fichier Rocher et Tremblay afin que vous puissiez voir la relation entre la définition d'enregistrement et les données de chaque enregistrement du fichier :
"101","ALEXANDRE GAGNON""150","JEAN LESSARD"
"201","MARIE BRISEBOIS"
"301","BOUTIQUE DE CADEAUX GAGNÉ"
"360","MARGERITE BOULAY"
"401","RICHARD LAMBERT"
"501","SERVICES INFORMATIQUES"
"540","HENRI CARLE"
"601","MAGALIE PAQUIN"
"701","PHILIPPE LEGENDRE"
"780","CATHERINE ROBITAILLE"
"801","ELIZABETH LANDRY"
"820","CADEAU ALLO"
"901","JUSTIN MAYER"
Dans cet exemple, les champs de chaîne de caractères sont entourés de guillemets doubles. Les guillemets sont facultatifs, et dans ce texte, nous présentons des exemples de fichiers avec et sans les guillemets. Maintenant que vous avez terminé la conception du programme, vous êtes prêt à coder les instructions du programme. Le programme suivant contient une version possible du code pour fournir la liste des clients de M. Tremblay. La première ligne du programme contient des commentaires énumérant le but et le nom du programme. Les seuls éléments décrits dans la section décrite dans les variables sont les champs du fichier CLIENT.SEQ. Le premier module du programme est ControlModule, appel les autres modules dans l'ordre&nnbsp;: WriteHeading d'abord, puis ProcessFile et enfin WriteEndMessage :
- 'Liste client:
- ' Programme pour afficher la liste des clients
- 'Nom du fichier:
- ' LISTCLT.BAS
- 'Variables du fichier client:
- ' CLIENT.SEQ
- ' Enregistrement client:
- ' ClientAcct$
- ' ClientName$
-
- ControlModule:
- GOSUB WriteHeadling
- GOSUB ProcessFile
- GOSUB WriteEndMessage
- END
-
- WriteHeadling:
- LPRINT "LISTE CLIENT"
- LPRINT
- RETURN
-
- ProcessFile:
- OPEN "CLIENT.SEQ" FOR INPUT AS #1
- DO UNTIL EOF(1)
- INPUT #1,ClientAcct$,ClientName$
- LPRINT ClientName$
- LOOP
- CLOSE #1
- RETURN
-
- WriteEndMessage:
- LPRINT
- LPRINT "FIN DU LA LISTE DE CLIENT"
- RETURN