Supprimer un element d'un fichier avec pascal [Fermé]

kevindll 64 Messages postés lundi 11 mai 2015Date d'inscription 18 juillet 2016 Dernière intervention - 16 juil. 2016 à 18:50 - Dernière réponse : f0xi 4304 Messages postés samedi 16 octobre 2004Date d'inscriptionModérateurStatut 9 mars 2018 Dernière intervention
- 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
Afficher la suite 

4 réponses

hoby500 76 Messages postés mardi 25 février 2003Date d'inscription 22 janvier 2018 Dernière intervention - 18 juil. 2016 à 07:26
0
Utile
Pourriez-vous prendre 5 minutes pour expliquer votre soucis.
Vous vous attendez à ce qu'on passe 1 h à comprendre votre source ?
kevindll 64 Messages postés lundi 11 mai 2015Date d'inscription 18 juillet 2016 Dernière intervention - 18 juil. 2016 à 09:38
0
Utile
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.
vico8000 291 Messages postés lundi 18 janvier 2016Date d'inscription 14 février 2018 Dernière intervention - Modifié par vico8000 le 21/07/2016 à 16:15
0
Utile
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.
f0xi 4304 Messages postés samedi 16 octobre 2004Date d'inscriptionModérateurStatut 9 mars 2018 Dernière intervention - 17 août 2016 à 15:46
0
Utile
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.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.