Utilisateur anonyme
-
16 juil. 2016 à 18:50
f0xi
Messages postés4205Date d'inscriptionsamedi 16 octobre 2004StatutModérateurDernière intervention12 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;
{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);
{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);
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;
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.
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
Messages postés4205Date d'inscriptionsamedi 16 octobre 2004StatutModérateurDernière intervention12 mars 202235 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.