Constatant qu'il y a encore fréquemment des questions dans le forum sur les fichiers d'enregistrements, je me suis amusé à écrire un court exemple contenant tout ce qu'il faut savoir sur le sujet (cela dit sans prétention car il n'y a en fait que peu de choses à savoir). Voici donc cet exemple.
Il y a quelque temps j'avais entrepris de relire tout Pascal () et de relever les phrases que je voulais retenir pour pouvoir les citer avec exactitude. J'ai copié ces phrases au fur et à mesure dans des fichiers faits tous de la même façon, à savoir des fichiers de quatre lignes contenant respectivement la citation, l'œuvre dont elle est tirée, la page et une liste de mots-clés :
À partir de cette collection de fichiers, je vais constituer une base de données, sous la forme d'un fichier d'enregistrements.Ainsi, il n'a rien d'extravagant dans sa conduite; il agit comme les autres; et tout ce qu'ils font dans la sotte pensée qu'ils suivent le vrai bien, il le fait par un autre principe, qui est que les vraisemblances étant pareilles d'un et d'autre côté, l'exemple et la commodité sont les contrepoids qui l'entraînent.
Entretien avec M. de Saci
570
Montaigne,extravagance,conduite,exemple
Pour ce faire je commence par déclarer le nom du fichier dans une constante, et le type du fichier :
Ensuite j'écris les différentes procédures dont j'aurai besoin. Premièrement, une procédure pour ajouter un enregistrement :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 const FICHIER = 'citations.dat'; type TCitation = record texte: array[0..999] of char; opus: shortstring; page: word; clefs: shortstring; end; TFichierCitations = file of TCitation;
Je préfère déclarer le fichier comme variable locale, et l'ouvrir et le fermer à l'intérieur de chaque procédure, plutôt que de l'ouvrir dans une procédure, le lire dans une autre, le fermer dans une troisième... Mais ça peut se discuter.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 procedure Ajouter(const c: TCitation); var f: TFichierCitations; begin AssignFile(f, FICHIER); if FileExists(FICHIER) then Reset(f) else Rewrite(f); Seek(f, FileSize(f)); Write(f, c); CloseFile(f); end;
Ensuite j'ai besoin d'une procédure pour lire le fichier :
Et d'une autre pour supprimer un enregistrement à partir de son emplacement :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 procedure LireTout(); var f: TFichierCitations; c: TCitation; begin if FileExists(FICHIER) then begin AssignFile(f, FICHIER); Reset(f); while not EOF(f) do begin Write(Format('%0.3d ', [FilePos(f)])); Read(f, c); WriteLn(c.clefs); end; CloseFile(f); end; end;
Enfin, une procédure de recherche à partir d'un mot-clé :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 procedure Supprimer(const aIndex: longword); var f: TFichierCitations; c: TCitation; begin if FileExists(FICHIER) then begin AssignFile(f, FICHIER); Reset(f); // Se placer sur le dernier enregistrement Seek(f, FileSize(f) - 1); // Le lire Read(f, c); // Se placer sur l'enregistrement à supprimer Seek(f, aIndex - 1); // Écrire les valeurs lues précédemment Write(f, c); // Se replacer sur le dernier enregistrement Seek(f, FileSize(f) - 1); // Tronquer le fichier Truncate(f); CloseFile(f); end; end;
Cette procédure sera appelée ainsi :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 procedure Chercher(const aClef: string); var f: TFichierCitations; c: TCitation; begin WriteLn(UpperCase(aClef)); if FileExists(FICHIER) then begin AssignFile(f, FICHIER); Reset(f); while not EOF(f) do begin Read(f, c); if Pos(aClef, c.clefs) > 0 then WriteLn(' ', c.texte); end; CloseFile(f); end; end;
Ce qui donne le résultat suivant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 Chercher('religion'); Chercher('Montaigne'); Chercher('pensée'); Chercher('homme');
Qu'en pensez-vous ?RELIGION
J'aurais bien plus de peur de me tromper, et de trouver que la religion chrétienne soit vraie, que non pas de me tromper en la croyant vraie.
MONTAIGNE
Ainsi, il n'a rien d'extravagant dans sa conduite; il agit comme les autres; et tout ce qu'ils font dans la sotte pensée qu'ils suivent le vrai bien, il le fait par un autre principe, qui est que les vraisemblances étant pareilles d'un et d'autre côté, l'exemple et la commodité sont les contrepoids qui l'entraînent.
Il inspire une nonchalance du salut, sans crainte et sans repentir. Son livre n'étant pas fait pour porter à la piété, il n'y était pas obligé : mais on est toujours obligé de n'en point détourner. On peut excuser ses sentiments un peu libres et voluptueux en quelques rencontres de la vie; mais on ne peut excuser ses sentiments tout païens sur la mort; car il faut renoncer à toute piété, si on ne veut au moins mourir chrétiennement : or, il ne pense qu'à mourir lâchement et mollement par tout son livre.
Il me semble que la source des erreurs de ces deux sectes est de n'avoir pas su que l'état de l'homme à présent diffère de celui de sa création; de sorte que l'un remarquant quelques traces de sa première grandeur, et ignorant sa corruption, a traité la nature comme saine et sans besoin de réparateur, ce qui le mène au comble de la superbe; au lieu que l'autre, éprouvant la misère présente et ignorant la première dignité, traite la nature comme nécessairement infirme et irréparable, ce qui le précipite dans le désespoir d'arriver à un véritable bien, et de là dans une extrême lâcheté.
PENS?E
En écrivant ma pensée, elle m'échappe quelquefois; mais cela me fait me souvenir de ma faiblesse, que j'oublie à toute heure; ce qui m'instruit autant que ma pensée oubliée, car je ne tends qu'à connaître mon néant.
Pensée fait la grandeur de l'homme.
Je puis bien concevoir un homme sans mains, pieds, tête (car ce n'est que l'expérience qui nous apprend que la tête est plus nécessaire que les pieds). mais je ne puis concevoir l'homme sans pensée : ce serait une pierre ou une brute.
Toute la dignité de l'homme est en la pensée. Mais qu'est-ce que cette pensée ? Qu'elle est sotte !
L'homme n'est qu'un roseau, le plus faible de la nature; mais c'est un roseau pensant. Il ne faut pas que l'univers entier s'arme pour l'écraser : une vapeur, une goutte d'eau, suffit à le tuer. Mais, quand l'univers l'écraserait, l'homme serait encore plus noble que ce qui le tue, puisqu'il sait qu'il meurt, et l'avantage que l'univers a sur lui, l'univers n'en sait rien.
HOMME
Les hommes s'occupent à suivre une balle et un lièvre; c'est le plaisir même des rois.
Pensée fait la grandeur de l'homme.
Je puis bien concevoir un homme sans mains, pieds, tête (car ce n'est que l'expérience qui nous apprend que la tête est plus nécessaire que les pieds). mais je ne puis concevoir l'homme sans pensée : ce serait une pierre ou une brute.
Toute la dignité de l'homme est en la pensée. Mais qu'est-ce que cette pensée ? Qu'elle est sotte !
L'homme n'est qu'un roseau, le plus faible de la nature; mais c'est un roseau pensant. Il ne faut pas que l'univers entier s'arme pour l'écraser : une vapeur, une goutte d'eau, suffit à le tuer. Mais, quand l'univers l'écraserait, l'homme serait encore plus noble que ce qui le tue, puisqu'il sait qu'il meurt, et l'avantage que l'univers a sur lui, l'univers n'en sait rien.
Partager