Ajout d'élément dans un fichier séquentiel
Salut !
Dans un but pédagogique, J'essaie de manipuler les fichiers séquentiels structurés sous Pascal.
Les opérations de base sont : la création, la lecture et la mise à jour.
J'ai pris l'exemple d'un fichier qui contient des coordonnées 2D d'un ensemble de points dont voici la déclaration :
Code:
1 2 3 4 5 6 7 8 9 10
|
type
point = record
X, Y : integer ;
end ;
TRACE = file of point ;
var
FichPoint : TRACE;
p : point; |
Pour la création du fichier :
Code:
1 2 3 4 5 6 7 8 9 10 11
|
{Ce code Créer le fichier est y ajoute deux éléments}
assign(FichPoint, 'c:fich.dat') ;
rewrite (fichPoint);
p.x:=20;
p.y:=25;
write(FichPoint,p);
p.x:=30;
p.y:=45;
write(FichPoint,p);
close(FichPoint); |
Pour la lecture :
Code:
1 2 3 4 5 6 7 8 9 10 11 12
|
{Ce code parcours le fichiers et affiche l'ensemble des points}
assign(FichPoint, 'c:fich.dat') ;}
reset(FichPoint);
while Not(EOF(FichPoint)) do
begin
read(FichPoint,p);
writeln(p.x);
writeln(p.y);
writeln('***');
end;
close(FichPoint); |
Jusqu'ici il n'y a aucun problème.
Maintenant, je voudrais effectuer une mise à jour sur ce fichier.
Corrigez-moi svp si je me trompe, il me semble que pour un fichier séquentiel, la seule opération de mise à jour possible est l'ajout en fin de fichier (impossible d'ajouter un élément au milieu du fichier).
Mais alors, comment ajouter un élément en fin de fichier, sans écraser son contenu ?
En utilisant Rewrite, le fichier est détruit et avec Reset, le pointeur est au début du fichier !
Avez-vous des idées ?
PS : Je sais qu'il est préférable dans ce cas de travailler avec des fichiers à accès direct ; j'essaie uniquement de lever certaines zones d'ombre des fichiers séquentiels.