APPLICATIONSDIVERS ★ ECRITURE DIRECTE DE FICHIERS TEXTE (CPC REVUE) ★

Ecriture directe de fichiers texte (CPC Revue)Applications Divers
Nous allons vous préciser les "dessous" des ordres OPENOUT, OPENIN, CLOSEOUT, CLOSEIN, qui permettent d'enregistrer toutes sortes de données sur cassettes ou disquettes. Vu l'intérêt évident de ces commandes, il est essentiel de tout savoir sur elles, ce qui est permis, ce qui ne l'est pas, ainsi que leurs pièges. En guise de final, nous vous livrerons un petit utilitaire super-utile...

QU'EST-CE QU'UN FICHIER ?

C'est un enregistrement contenant une suite de mots et de nombres, même mélangés, et dans un ordre pouvant être quelconque. Puisqu'ils sont écrits à la "queue-leu-leu'', bout-à-bout, on les appelle des fichiers séquentiels : à la différence des fichiers "indexés" ou à "accès direct" (seulement possibles avec le CPC 6128 et le PCW), Nous n'en parlerons pas aujourd'hui, car c'est corn plétement "à part".

Un fichier est composé avant tout d'en registrements. Un enregistrement peut être un mot, un nombre, ou une longue phrase (maximum 255 caractères), exac tement comme une feuille de papier où vous auriez écrit des notes, parfois un mot par ligne, ou une longue phrase Ainsi, au lieu de "enregistrements", il est fréquent de parler de "lignes" d'un fichier, c'est pareil, c'est plus court à pro noncer, mais c'est "incorrect",..

Un enregistrement, c'est une suite de caractères (lettres, chiffres ou CHR$, jusqu'à 255). Voilà pourquoi on les appelle des "Fichiers ASCII", à l'opposé des "fichiers binaires", lesquels sont le plus souvent des programmes ou des suites de nombres (0 à 255) comme les "fichiers écrans".

On ne peut faire un LOAD d'un fichier ASCII, ce serait absurde , où voulez vous donc qu'il aille se loger dans la mémoire ? En revanche, on peut faire LOAD sur un fichier binaire ( BIN), car lui, il sait où il doit aller.

En somme, un "fichier séquentiel ASCII", c'est une feuille de notes que l'on écrit sur support magnétique, une suite de DATA sur disquette ou cas sette". D'ailleurs, les Anglo-saxons les appellent des "DATA FILES". (Note : en anglais, le mot "FILE" désigne aussi bien un "programme" qu'un "fichier"...)

A QUOI ÇA SERT ?

A récupérer d'une manière permanente ce qu'a produit un programme, qu'il s'agisse d'un traitement de texte, d'un logiciel de calculs (tableur, "calc", etc ), d'un gestionnaire de fichiers, ou d'une partie d'échecs en cours ..

Rien de plus facile que de faire le voyeur sur un fichier ASCII (impossible à protéger). Par exemple, sous CP'M, il suffit de taper TYPE, suivi du nom du fichier. Mais quelle pagaille 1 Afin que cette suite de données soit exploitable, vous devinez que le logiciel qui les a entassées ainsi devra les ressortir selon la même logique pour "retrouver ses petits"

Un usage très particulier est la sauve garde d'un programme Basic en ASCII, non pas par OPENOUT, mais par SAVE "nom du programme", virgule A. Ce fichier ASCII est la reproduction exacte de votre listing , un enregistrement par ligne Basic II est normal que sa taille sur disquette ou cassette soit supérieure d'environ 20 % à la version Basic ( BAS). En effet, pour "LOCATE 8,12:", cela fait 12 caractères, soit 1 2 octets en ASCII, mais en traduction Basic, il n'y a que trois octets, à savoir 169 (TOKEN de LOCATE), 8 et 12. Un programme Basic en ASCII (pas d'extension) est un cas particulier, car c'est le seul à pouvoir être chargé par LOAD ou RUN. Deux usages principaux la récupération par MERGE ou CHAIN MERGE (CPC 464) ou pour transmettre un programme Basic par une "interface série RS 232c", direc tion un ordinateur d'une autre marque ou un MODEM.

OUVERTURE ET FERMETURE D'UN FICHIER

Pour l'ordinateur, des éléments comme le magnéto cassette ou le drive, c'est de "l'extérieur à lui", même si c'est dans le même boîtier en plastique. S'il doit créer, écrire un fichier, il doit faire sortir des données qu'il a dans sa mémoire et ce en "ouvrant" cette sortie. D'où le mot OPENOUT, suivi du nom que ce fichier aura sur disquette ou cassette. Donc, cet ordre se contente d'enregistrer le nom. Viennent ensuite les données à enregis trer, puis il faut fermer le fichier en question (terminer), c'est le mot CLOSEOUT ( ferme la sortie) A votre insu, un CHR$(26) est enregistré après la dernière de vos données, c'est le repère de fin de fichier sur le support magnétique. Physiquement, qu'est ce qui est enregis tré ? C'est légèrement différent sur cas sette ou disquette : sur cassette, c'est le nom. le type (ASCII), le numéro de "block" et sa longueur en octets, c'est à dire 2048 ou moins. La longueur totale (plusieurs blocks) est encore ignorée Puis les données (codes ASCII de cha que caractère) et enfin le CHR$(26) (aussi appelé CTRL Z).

Sur disquette, le nom, le type, la longueur totale et la localisation pistes/secteur sont enregistrés sur la piste n°2, celle du DIR ou de CAT Les données sont sur d'autres pistes et avec, en final, le CHR$(26l, ( &1A). Il va de soi que

la taille sur la piste n° 2 est enregistrée en dernier, quand on connaît la longueur totale et ce lors du CLOSEOUT.

Pour charger les données d'un fichier, l'ordinateur doit à présent ouvrir pour faire entrer des données dans sa mémoire, d'où le mot OPENIN, puis les recevoir par des INPUT # 9, # 9 signifiant canal n° 9, celui de cassettes ou disquet tes. Prenons l'exemple du fichier TRUC comportant 100 enregistre ments, que l'on va loger en mémoire dans un tableau DIM D$

310 DIM D$(100)
320 OPENIN"TRUC"
330 FOR 1 = 1 TO 100
340 INPUT #9,D$(I):NEXT
350 CLOSEIN

Le CLOSEIN va faire quitter la canal tt 9 pour que l'ordinateur puisse faire autre chose, un OPENOUT ou un autre OPEN IN par exemple. Remarquez que l'enre gistrement n° 101, le CHR$(26) n'a pas été lu, le CLOSEIN s'est fait avant Modifions la ligne 330 en 330 FOR I = 1 TO 18 Le fichier est fermé par CLOSEIN, alors qu'il avait encore quelque chose à lire. Sans importance et sans conséquence. Vous avez parfaitement le droit de faire un arrêt prématuré de lecture. Modifions encore la ligne 330 ;

330 FOR I=1 TO 108

Pour I = 101, il fait l'INPUT #9 sur le CHR$(26). Il n'aime pas cela et il vous dit :

EOF met in 340

et il plante là. Cela se traduit par "Fin de fichier rencontré en ligne 340". Cet EOF ( End of file), c'est le CHR$(26). Alors comment faire si on ne connaît pas le nombre exacte d'enregistrements dans le fichier ? Eh bien, c'est là que le CHR$(26) ou EOF va nous être très utile

330 WHILE NOT EOF I = I + 1
340 INPUT #9,D$(I) : WEND

Ça signifie "tant que tu ne rencontres pas le EOF, tu entres les données". Pour lister un fichier à l'écran, ces lignes deviennent

330 WHILE NOT EOF
340 INPUT # 9,A$:PRINT A$:WEND

C'est l'équivalent du TYPE en CP/M. Pour éditer sur imprimante, remplacez PRINT A$ par PRINT #8,A$.

LES OUVERTURES COMBINEES

Vous n'avez pas le droit de faire un second OPENOUT sur un autre nom de fichier, tant que le premier OPENOUT n'a pas été fermé par CLOSEOUT. Idem pour OPENIN. Sinon plantage avec le message "File already open", signifiant "Fichier déjà ouvert"

En revanche, vous avez le droit (sur dis quette) d'avoir en même temps un OPENIN et un OPENOUT. Un exemple : nous avons un fichier "TRUC" conte nant des nombres, à partir duquel nous voulons créer un fichier ''TRUC5", où ces mêmes nombres seront multipliés par cinq

300 OPENIN "TRUC"
310 OPENOUT "TRUC5"
320 WHILE NOT EOF
330 INPUT #9,N
340 PRINT #9,N * 5
350 WEND
360 CLOSEIN
370 CLOSEOUT

L'ordre des lignes 300 310 au 360/370 n'a aucune importance ; on peut corn mencer par OPENIN ou OPENOUT. Avantage : On n'a pas eu à charger en DIM le fichier TRUC pour le "recracher" dans TRUC5.
Inconvénient : Chrono en main, c'est un peu plus lent qu'en faisant l'OPENOUT "TRUC5'' après le CLOSEIN de "TRUC".

LES TECHNIQUES D'ECRITURES DE DONNEES

Doit-on utiliser PRINT #9 ou WRITE #9 ? Disons tout de suite, WRITE est plus pru dent que PRINT Pour vous en convam cre, faites cet essai en mode direct : PRINT 3*2, 4*8

Vous obtenez 6 8 mais séparés par 13 espaces ! Remplaçons PRINT par WRITE. On a alors 6,8.

Pour PRINT, la virgule est une "tabulation de zone” ; pour WRITE, elle reste un "séparateur".

Soit à enregistrer les nombres 100, 200 et 300 :

PRINT #9,100,200,300 au WRITE #9,100,200,300

Il sont tous deux corrects, mais avec PRINT #9, le fichier sera beaucoup plus gros en octets. En effet, nous enregistrerions :

100 200 300

alors que WRITE#9 va donner 100,200,300.

Dans le premier cas, on va enregistrer 1,0,0, des blancs, 2,0,0, des blancs, 3,0 et 0 ; contre onze octets avec WRITE tt 9 pertes de temps et gaspillage de support magnétique.

En revanche, s'il n'y a qu'une valeur par enregistrement, comme :

PRINT # 9,1 100:PRINT #9,200:PRINT #9. 300

PRINT et WRITE sont d'effets identiques. Avec les chaînes, les différences sont plus grandes Essayez en mode direct : A$ "JEAN":B$ - "PAUL" puis PRINT A$.B$. Cela donne :

JEAN PAUL

et maintenant WRITE A$,B$. Surprise ! On a :

"JEAN","PAUL"

Les guillemets sont conservés !

Autre piège de la virgule avec PRINT : C$ = "MARIE,ANNIE"

Si vous faites PRINT C$, vous aurez : MARIE,ANNIE

mais après un PRINT #9,C$, à la lecture par INPUT#9,A$, vous aurez deux valeurs distinctes :

MARIE et ANNIE

Tout cela va justifier cette grande règle : Toujours WRITE tt 9 quand il y a des virgules de séparation ou quand une variable chaîne risque de renfermer une vir gule. WRITE#9 est donc une sécurité. Le seul avantage de PRINT #9 est un gain de deux octets (les deux guillemets), mais à condition de ne mettre qu'une seule valeur après le PRINT #9, de préférence une valeur numérique parce que ne risquant pas de renfermer une virgule Et si on remplaçait les virgules par des points virgules ? L'AMSTRAD CPC, qui possède le plus tolérant des Basic que l'auteur connaisse, acceptera cette ponctuation peu orthodoxe ; mais ne prenez pas cette habitude inutile car elle vous jouera de vilains tours sur d'autres micro ordinateurs .

CPC Revue

★ EDITEUR: CPC Revue
★ ANNÉE: 1987
★ CONFIG: 64K + AMSDOS
★ LANGAGE:
★ LiCENCE: LISTING
★ COLLECTION: CPC REVUE 1987
★ AUTEUR: Michel ARCHAMBAULT
 

★ AMSTRAD CPC ★ DOWNLOAD ★

Type-in/Listing:
» Ecriture  directe  de  fichiers  texte    LISTING    FRENCHDATE: 2015-11-16
DL: 272
TYPE: text
SiZE: 3Ko
NOTE:

★ AMSTRAD CPC ★ A voir aussi sur CPCrulez , les sujets suivants pourront vous intéresser...

Lien(s):
» Applications » Bw - Text (CPC Amstrad International)
» Applications » Happy Text
» Applications » Hometext
» Applications » Textool Package 96
» Applications » RSX Text (Compute Mit)
» Applications » Apos Textprogramm
Je participe au site:
» Vous avez des infos personnel, des fichiers que nous ne possédons pas concernent ce programme ?
» Vous avez remarqué une erreur dans ce texte ?
» Aidez-nous à améliorer cette page : en nous contactant via le forum ou par email.

CPCrulez[Content Management System] v8.7-desktop/c
Page créée en 814 millisecondes et consultée 1310 fois

L'Amstrad CPC est une machine 8 bits à base d'un Z80 à 4MHz. Le premier de la gamme fut le CPC 464 en 1984, équipé d'un lecteur de cassettes intégré il se plaçait en concurrent  du Commodore C64 beaucoup plus compliqué à utiliser et plus cher. Ce fut un réel succès et sorti cette même années le CPC 664 équipé d'un lecteur de disquettes trois pouces intégré. Sa vie fut de courte durée puisqu'en 1985 il fut remplacé par le CPC 6128 qui était plus compact, plus soigné et surtout qui avait 128Ko de RAM au lieu de 64Ko.