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

Messages postés
68
Date d'inscription
lundi 11 mai 2015
Dernière intervention
22 avril 2018
- 16 juil. 2016 à 18:50 - Dernière réponse :
Messages postés
4304
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
9 mars 2018
- 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

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