Files · Fichiers
| English | Français |
|---|---|
| file/faɪl/ | fichier |
| text file/tekst faɪl/ | fichier texte |
| secondary storage/ˈsekəndəri ˈstɔːrɪdʒ/ | stockage secondaire |
| persistence/pəˈsɪstəns/ | la persistance |
| end of file/end ɒv faɪl/ | fin de fichier |
| separator/ˈsepəreɪtə/ | séparateur |
| sequential/siːˈkwenʃl/ | séquentiel |
The game that remembered
- Until 1987, switching off a games console erased everything. Every session started from the first screen; a long game was a long afternoon or nothing.
- The Legend of Zelda shipped with a small battery inside the cartridge that kept a few hundred bytes alive. For the first time a home game could save, and pick up where you left off.
- Every high score, every document, every setting you have ever kept exists for the same reason: RAM forgets when the power goes, and a file 文件 does not.
- This lesson is why files exist and how pseudocode reads and writes a text file, line by line.
Le jeu qui s'en souvenait
- Jusqu'en 1987, éteindre une console effaçait tout. Chaque session repartait du premier écran ; un long jeu était une longue après-midi ou rien du tout.
- The Legend of Zelda livrait avec une petite batterie intégrée dans la cartouche pour maintenir quelques centaines d'octets actifs. Pour la première fois, un jeu domestique pouvait sauvegarder et reprendre là où on était resté.
- Chaque meilleur score, chaque document, chaque paramètre que vous avez jamais conservé existe pour la même raison : la RAM oublie quand l'alimentation coupe, et un fichier 文件 ne fait pas.
- Cette leçon explique pourquoi les fichiers existent et comment le pseudocode lit et écrit un fichier texte, ligne par ligne.
Why files
- Variables live in RAM and disappear when the program ends. A file on secondary storage 辅助存储器 keeps data between program runs: persistence 持久性.
- Files let one program's output become another program's input, so data can be shared.
- A file can hold more than fits in memory, and a program can restart from a saved state.
The variable is gone at the end of the run; the file is still there tomorrow
Pourquoi les fichiers
- Les variables vivent en RAM et disparaissent quand le programme se termine. Un fichier sur un stockage secondaire 辅助存储器 conserve les données entre les exécutions : persistance 持久性.
- Les fichiers permettent à la sortie d'un programme de devenir l'entrée d'un autre, afin que les données puissent être partagées.
- Un fichier peut contenir plus que ce que la mémoire permet, et un programme peut redémarrer depuis un état sauvegardé.

La variable est partie à la fin de l'exécution ; le fichier est toujours là demain
Why does a program write data to a file rather than keeping it in a variable? · Pourquoi un programme écrit-il des données dans un fichier plutôt que de les conserver dans une variable ?
RAM is volatile, so data is lost on exit. A file on secondary storage persists between runs. · La RAM est volatile, donc les données sont perdues à la sortie. Un fichier sur un stockage secondaire persiste entre les exécutions.
Text files and the three modes
- A text file 文本文件 stores data as lines of characters, which a program reads and writes one line at a time, from the start. That sequence of lines is what lets a loop work through it.
OPENFILE … FOR READreads from the first line.FOR WRITEcreates a new file, or overwrites an existing one.FOR APPENDadds new lines at the end, keeping what is there.- Open before use, close after. A file has one mode at a time.
Fichiers texte et les trois modes
- Un fichier texte 文本文件 stocke les données sous forme de lignes de caractères, qu'un programme lit et écrit une ligne à la fois, depuis le début. C'est cette séquence de lignes qui permet à une boucle de les parcourir.
OPENFILE … FOR READlit depuis la première ligne.FOR WRITEcrée un nouveau fichier, ou écrase un fichier existant.FOR APPENDajoute de nouvelles lignes à la fin, en conservant ce qui y est déjà.- Ouvrir avant d'utiliser, fermer après. Un fichier a un seul mode à la fois.
Match each file-open mode to what it does. · Reliez chaque mode d'ouverture de fichier à ce qu'il fait.
READ reads; WRITE replaces from scratch; APPEND adds to the end without losing what is there. · READ lit ; WRITE remplace à partir de zéro ; APPEND ajoute à la fin sans perdre ce qui est là.
To add lines to the end of an existing file without losing its contents, open it FOR ____. · Pour ajouter des lignes à la fin d'un fichier existant sans perdre son contenu, ouvrez-le FOR ____.
WRITE would start the file empty. APPEND keeps what is there and writes after it. · WRITE commencerait le fichier à vide. APPEND conserve ce qui est là et écrit après.
Reading every line
EOFtests for the end of file 文件结束. Test it before each read: reading past the end is an error.CLOSEFILEmatters: buffered data may be lost and other programs locked out of a file left open.
Lire chaque ligne
OPENFILE "data.txt" FOR READ
WHILE NOT EOF("data.txt") DO
READFILE "data.txt", LineString
OUTPUT LineString
ENDWHILE
CLOSEFILE "data.txt"
EOFteste la fin de fichier 文件结束. Testez-le avant chaque lecture : lire au-delà de la fin est une erreur.CLOSEFILEest important : les données tamponnées peuvent être perdues et d'autres programmes bloqués si un fichier reste ouvert.
Handling a file: open → use → close · Gestion d'un fichier : ouvrir → utiliser → fermer
Step through the lifecycle every file follows. The two easy-to-forget parts are testing EOF while reading in a loop, and always closing at the end. · Parcourez le cycle de vie suivi par chaque fichier. Les deux parties faciles à oublier sont de tester EOF pendant la lecture dans une boucle, et de toujours fermer à la fin.
What does EOF test for? · Que teste EOF ?
EOF (end of file) is checked before each read so the loop stops when there is no more data. · EOF (fin de fichier) est vérifié avant chaque lecture afin que la boucle s'arrête lorsqu'il n'y a plus de données.
Why must you always close a file after using it? · Pourquoi devez-vous toujours fermer un fichier après l'avoir utilisé ?
Closing flushes buffered writes to disk and releases the lock so other programs can use the file. · Fermer vide les écritures tamponnées vers le disque et libère le verrou afin que d'autres programmes puissent utiliser le fichier.
Writing lines
WRITEstarts the file empty. To add to a log that must keep its history, open itFOR APPENDinstead.- A text file holds strings: a number is converted with
NUM_TO_STRon the way out.
Écrire des lignes
OPENFILE "log.txt" FOR WRITE
FOR i ← 1 TO 100
WRITEFILE "log.txt", "Event " & NUM_TO_STR(i)
NEXT i
CLOSEFILE "log.txt"
WRITEcommence le fichier vide. Pour ajouter à un journal qui doit conserver son historique, ouvrez-leFOR APPENDà la place.- Un fichier texte contient des chaînes : un nombre est converti avec
NUM_TO_STRlors de l'écriture.
Worked example: the last three lines of a file
- Write a procedure
LastLines(FileName)that outputs the last three lines of a text file, in order.
- Each new line pushes the previous ones along, so at
EOFthe three variables hold the last three lines; a shorter file outputs empty strings. For the first five lines, count the reads and stop at five or atEOF, whichever comes first. An empty file makesEOFtrue immediately after opening.
Exemple résolu : les trois dernières lignes d'un fichier
- Écrivez une procédure
LastLines(FileName)qui affiche les trois dernières lignes d'un fichier texte, dans l'ordre.
PROCEDURE LastLines(BYVAL FileName : STRING)
DECLARE LineX, LineY, LineZ : STRING
LineX ← ""
LineY ← ""
LineZ ← ""
OPENFILE FileName FOR READ
WHILE NOT EOF(FileName) DO
LineX ← LineY
LineY ← LineZ
READFILE FileName, LineZ
ENDWHILE
CLOSEFILE FileName
OUTPUT LineX
OUTPUT LineY
OUTPUT LineZ
ENDPROCEDURE
- Chaque nouvelle ligne pousse les précédentes vers l'avant, donc à
EOF, les trois variables contiennent les trois dernières lignes ; un fichier plus court affiche des chaînes vides. Pour les cinq premières lignes, comptez les lectures et arrêtez-vous à cinq ou àEOF, selon ce qui arrive en premier. Un fichier vide rendEOFvrai immédiatement après l'ouverture.
Put the steps of the LastLines procedure in order. · Remettez les étapes de la procédure LastLines dans l'ordre.
Initialise, open, loop with the shift before the read, close, output. Shifting after the read would lose the newest line. · Initialiser, ouvrir, boucle avec le décalage avant la lecture, fermer, sortir. Décaler après la lecture ferait perdre la ligne la plus récente.
Fields in a line
- A record is written as one line, its fields joined by a separator 分隔符 character, and each number or Boolean converted with
NUM_TO_STR(and read back withSTR_TO_NUM, or by comparing with"TRUE"). - Choose a separator that can never appear in the data: a comma or
|for names and numbers; never a space when a name may contain one. - Reading back: read the line, split it at the separator, convert each field to its type, store it in the record.
Join with a separator to write; split and convert to read
Champs dans une ligne
- Un enregistrement est écrit comme une ligne, ses champs joints par un séparateur 分隔符, et chaque nombre ou Booléen converti avec
NUM_TO_STR(et lu à nouveau avecSTR_TO_NUM, ou en comparant avec"TRUE"). - Choisissez un séparateur qui ne peut jamais apparaître dans les données : une virgule ou
|pour les noms et nombres ; jamais un espace si un nom peut en contenir un. - Lecture : lire la ligne, la découper au séparateur, convertir chaque champ à son type, le stocker dans l'enregistrement.

*Joindre avec un séparateur pour écrire ; découper et convertir pour lire
A line stores a player's full name and score. Which separator is the safest choice? · Une ligne stocke le nom complet d'un joueur et son score. Quel séparateur est le choix le plus sûr ?
The separator must never occur inside a field. A full name contains a space, and a score contains digits. · Le séparateur ne doit jamais apparaître à l'intérieur d'un champ. Un nom complet contient un espace, et un score contient des chiffres.
An INTEGER can be written to a text file directly, without converting it to a string first. · Un INTEGER peut être écrit directement dans un fichier texte, sans conversion préalable en chaîne de caractères.
A text file holds lines of characters. Convert with NUM_TO_STR to write and STR_TO_NUM to read back. · Un fichier texte contient des lignes de caractères. Convertir avec NUM_TO_STR pour écrire et STR_TO_NUM pour relire.
Worked example: save a record, load it back
- A record
Playerhas fieldsName : STRINGandScore : INTEGER. Write pseudocode to append it toscores.txtas one line, and to read one line back into the record.
- The marks: the right mode, the conversion of the number in both directions, a separator that cannot occur in a name, and both files closed.
Exemple résolu : sauvegarder un enregistrement, le recharger
- Un enregistrement
Playera des champsName : STRINGetScore : INTEGER. Écrivez du pseudocode pour l'ajouter àscores.txtcomme une seule ligne, et pour lire une ligne de retour dans l'enregistrement.
OPENFILE "scores.txt" FOR APPEND
WRITEFILE "scores.txt", Player.Name & "," & NUM_TO_STR(Player.Score)
CLOSEFILE "scores.txt"
OPENFILE "scores.txt" FOR READ
READFILE "scores.txt", Line
Pos ← POSITION(Line, ",")
Player.Name ← LEFT(Line, Pos - 1)
Player.Score ← STR_TO_NUM(MID(Line, Pos + 1, LENGTH(Line) - Pos))
CLOSEFILE "scores.txt"
- Les points : le bon mode, la conversion du nombre dans les deux sens, un séparateur qui ne peut pas apparaître dans un nom, et les deux fichiers fermés.
To store a record as one line of a text file, a program must: select all · tout that apply. · Pour stocker un enregistrement comme une ligne d'un fichier texte, un programme doit : sélectionner toutes celles qui s'appliquent.
Convert, join, write, close. A text file has no binary layout; that is what a binary file would do. · Convertir, joindre, écrire, fermer. Un fichier texte n'a pas de mise en mémoire binaire ; c'est ce que ferait un fichier binaire.
Serial and direct access
- A text file is serial 顺序 (sequential): it is read in order from the start, so finding one line means reading every line before it.
- Direct (random) access jumps straight to a record at a calculated position without reading the others; it needs fixed-length records, which text files do not have.
- For the syllabus, the text-file loop above is the model: open, test
EOF, read, close.
Accès séquentiel et direct
- Un fichier texte est sériel 顺序 (série) : il est lu dans l'ordre depuis le début, donc trouver une ligne signifie lire toutes les lignes qui la précèdent.
- L'accès direct (aléatoire) saute directement vers un enregistrement à une position calculée sans lire les autres ; il nécessite des enregistrements de longueur fixe, ce que les fichiers texte n'ont pas.
- Pour le programme, la boucle de fichier texte ci-dessus est le modèle : ouvrir, tester
EOF, lire, fermer.
Direct (random) access lets a program jump straight to a record without reading the others first. · L'accès direct (aléatoire) permet à un programme de sauter directement vers un enregistrement sans lire les autres d'abord.
Serial access must read from the start. · L'accès séquentiel doit lire depuis le début.
Marks that slip away
- Reading past the end. Test
EOFbefore everyREADFILE. - Opening
FOR WRITEwhen the file must keep its contents. That isAPPEND. - Writing a number without
NUM_TO_STR, or reading it back withoutSTR_TO_NUM. A text file holds strings. - Forgetting
CLOSEFILE, or using a file beforeOPENFILE. Both lose the mark for the file handling.
Pièges qui font perdre des points
- Lire au-delà de la fin. Tester
EOFavant chaqueREADFILE. - Ouverture
FOR WRITElorsque le fichier doit conserver son contenu. C'est-à-direAPPEND. - Écrire un nombre sans
NUM_TO_STR, ou le relire sansSTR_TO_NUM. Un fichier texte contient des chaînes. - Oublier
CLOSEFILE, ou utiliser un fichier avantOPENFILE. Les deux font perdre des points pour la manipulation des fichiers.
You've got it
- files give persistence: data survives the end of the program, can be shared, and can exceed memory
OPENFILE … FOR READ | WRITE | APPEND→READFILE/WRITEFILE→CLOSEFILE;WRITEoverwrites,APPENDadds at the end- test
EOFbefore each read; convert numbers withNUM_TO_STRout andSTR_TO_NUMback - one record = one line, fields joined by a separator that never appears in the data
Vous avez compris
- Les fichiers offrent la persistance : les données survivent à la fin du programme, peuvent être partagées, et peuvent dépasser la mémoire
OPENFILE … FOR READ | WRITE | APPEND→READFILE/WRITEFILE→CLOSEFILE;WRITEécrase,APPENDajoute à la fin- tester
EOFavant chaque lecture ; convertir les nombres avecNUM_TO_STRà la sortie etSTR_TO_NUMà l'entrée - un enregistrement = une ligne, champs joints par un séparateur qui n'apparaît jamais dans les données