Supprimer un element d'un fichier avec pascal

Utilisateur anonyme - 16 juil. 2016 à 18:50
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 - 17 août 2016 à 15:46
Bonjour,
je rencontre des difficultés pour supprimer un element d'un fichier avec pascal
regarder mon code SVP


program exercice2;
uses crt;

type

date = record
jj:integer;
mm:integer;
annee:integer;
end;

ouvrage = record
num_isbn:integer;
titre:string;
annee:integer;
paru:integer;
maison_edition:string;
end;

personne = record
num_id:integer;
nom:string[20];
prenom:string[15];
date_nais:date;
nation:string[10];
nombre_ouvrage : integer;
list_ouvr:ouvrage;
end;

{Fichier d'enregistrements}
fic =file of personne;

var reponse , choix_1 , i , j, n :integer;
choix_2 : char;
rep:fic;

{Attente d'une touche au clavier}
PROCEDURE pause;
begin
writeln;writeln('Presser une touche...');
readkey;
clrscr;
end;



{ Verification du fichier de donnees f}
PROCEDURE creationfichier(var f: fic);
var choix: integer;
begin
writeln;
repeat
write(' Detruire le fichier existant (1) ou Annuler (2) ? ');
readln(choix);
until (choix=1) or (choix=2);
if choix=1 then
begin
rewrite(f);
close(f);
writeln;writeln(' Ok.'); pause;

end;
end;

//procedure pour ajouter
procedure ajouter_auteur(var f:fic);
var
nouveau : personne;
begin

{Positionnement en fin de fichier}
reset(f);
seek(f,filesize(f));

{Saisie}
writeln;
with nouveau do
begin
writeln(' #: ', filepos(f)+1);
write('donner le numero d''identification de l''auteur : ');
readln(num_id);

write('donner son nom : '); readln(nom);
write('donner son prenom :'); readln(prenom);


writeln('entrez sa nationalit',chr(130),' ');
readln(nation);

writeln('entrez le nombre d''ouvrage produit ');
readln(nombre_ouvrage);


for i:=1 to nombre_ouvrage do
begin
writeln('entrez le numero ISBN de livre : #',i);
readln(list_ouvr.num_isbn);

writeln('entrez le titre #',i);
readln(list_ouvr.titre);

writeln('entrez l''anne',chr(130),' de parution #',i);
readln(list_ouvr.paru);

writeln('entrez le nom de la maison d''edition ',i);
readln(list_ouvr.maison_edition);

writeln;writeln;
{Stockage}
write(f,nouveau);
end;

end;


end;



{Suppression d'un enregistrement à partir du numero id de l'auteur}
PROCEDURE supprimer(var f: fic);
var num:integer;

function trouve(num:integer;var f:fic):boolean;
var r:personne;
tr:boolean;
begin
tr:=false;
seek(f,0);
while (not eof(f)) and (not(tr)) do
begin
read(f,r);
tr:= r.num_id = num;
end;
trouve:=tr;
end;


Procedure suppr(num:integer;var f:fic);
var r:personne;
f2:fic;
begin
assign(f2,'ftemp.dat');
rewrite(f2);
reset(f);

while not eof(f) do
begin
read(f,r);
if r.num_id <> num then write(f2,r);
end;

erase(f);
rename(f2,'auteur.dat');
end;

begin
writeln('numéro ID de l''auteur');readln(num);
reset(f);
if trouve(num,f) then
suppr(num,f)
else
begin
writeln('numéro d''identification de cet auteur inexistant');
readln;
end;
close(f);
end;

{Recherche dans le fichier f }
PROCEDURE recherche_annee(var f: fic);
var annee: integer;
r: personne;
c: integer;
begin
writeln;
write('Entrez l''anne',chr(130),' de l''auteur : '); readln(annee);
{Parcours de f avec affichage des auteurs}
writeln;
reset(f);
c:=0;
while not eof(f) do
begin
read(f,r);
if (r.date_nais.annee = annee ) or (r.date_dec.annee = annee ) then
begin
writeln('======================================================================================');
writeln(filepos(f),') NOM : ', r.nom,' PREONOM: ', r.prenom,' NATIONALITE ', r.nation, ' NOMBRE D''OUVRAGES : ',r.nombre_ouvrage );
c:=c+1;
end;
end;
close(f);
if c=0 then writeln('Pas de correspondance , Veuillez essayer un autre ...');
pause;
end;







//pour l'affichage du sous menu 2
procedure affichage_sm_2();
begin
clrscr;

writeln('OPERATIONS SUR LA BASE***');
writeln('a: liste des auteurs d''un etat donne');
writeln('e: supprimer un auteur ');
writeln('QUE VOULEZ VOUS FAIRE ?');


readln(choix_2);
case choix_2 of
'a':begin
clrscr;
recherche_annee(rep);
end;


'e':begin
clrscr;
supprimer(rep);
end;
end;
end;











{Programme principal}
begin
{ Initialisations}
assign(rep,'auteur.dat');
//menu
repeat
clrscr;
writeln;
gotoxy(13,03);
writeln('---------------------------------------------------------');
for j:=4 to 22 do
begin
gotoxy(13,J);
writeln('-');
gotoxy(70,j);
writeln('-');
end;
gotoxy(20,7);
writeln('**Menu **************************** AUTEURS **');
gotoxy(20,11);
writeln('1:** Creation de la base ');
gotoxy(20,13);
writeln('2:** Operations sur la base ');
gotoxy(20,15);

writeln(' **Que voulez vous faire ? (1,2) **');
gotoxy(13,23);
writeln('---------------------------------------------------------');
gotoxy(17,19);
readln(choix_1);

case choix_1 of
1:begin
clrscr;
creationfichier(rep);
writeln('entrez le nombre d''enregistrement a effectuer');
readln(n);
for i:= 1 to n do
begin
ajouter_auteur(rep);
end;
end;

2:begin
affichage_sm_2();
end;

end;

until choix_1 = 0 ;
readln;
end.

merci d'avance

4 réponses

hoby500 Messages postés 86 Date d'inscription mardi 25 février 2003 Statut Membre Dernière intervention 26 mai 2019
18 juil. 2016 à 07:26
Pourriez-vous prendre 5 minutes pour expliquer votre soucis.
Vous vous attendez à ce qu'on passe 1 h à comprendre votre source ?
0
Utilisateur anonyme
18 juil. 2016 à 09:38
Premier problème résolu j'arrive à supprimer un auteur de mon fichier en créer un fichier. Le second problème c'est de supprimer un ouvrage que possède un auteur.
0
vico8000 Messages postés 287 Date d'inscription lundi 18 janvier 2016 Statut Membre Dernière intervention 14 février 2018 2
Modifié par vico8000 le 21/07/2016 à 16:15
Salut,

Donc ce que tu souhaites faire c'est de supprimer un fichier, une ligne du fichier ? (Je n'ai pas pris la peine de consulter la source.)

Pour supprimer un fichier :
DeleteFile('Chemin du Fichier + Nom du fichier + Extension')


Pour supprimer une ligne : Tu fais un ReadLn pour parcourir tout ton fichier ligne par ligne, en parallele, tu stocker dans un TStringList chaque ligne de ton fichier.
Enfin, tu effaces ton fichier pour le réécrire avec la fonction WriteLN, en passant ce que tu ne veux plus dans ton fichier.


i:=0;
j:=0;
AssignFile(newFile, 'Chemin');
Reset (newFile);
WHILE NOT Eof(newFile) DO
BEGIN
ReadLn(newFile, Stg);
Tab[i] := stg;
i:=i+1;
END;
while j<i do
Begin
if tab[j] <> 'ce que tu ne veux pas dans ton fichier' then
Begin
writeln(newfile,tab[j])
End;
End;
closefile(newfile);


Code non testé mais tu devrais avoir un truc du genre.
0
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
17 août 2016 à 15:46
Bonjour, nous ne sommes pas la pour faire vos exercices à votre place, les File of record datent d'il y a 30 ans, vous trouverez de nombreux tuto sur la toile en quelques secondes.
0
Rejoignez-nous