IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Pascal Discussion :

Suppression d'un enregistrement dans un fichier


Sujet :

Pascal

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 67
    Points : 75
    Points
    75
    Par défaut Suppression d'un enregistrement dans un fichier
    Salut à tous
    Je voudrais bien savoir comment supprimer un enregistrement dans un fichier en utilisant une procedure.

    Mon programme permet de créer un fichier d'études des élèves, ajouter, modifier et supprimer un élève.
    Après un travail lourd, je trouve comment faire toutes les procédures,
    mais j'arrive pas trouver comment supprimer un enregistrement (élève).
    svp, je vous prie de m'aider.

    Voici les déclarations :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     type TEtudiant=record
                        Ninsc  : string[15];
                        Nom    : string[30];
                        Prenom : string[30];
                        T_Notes  :array[1..5] of real;
                        Moy    :real;
                     end;
           Fetudiant= file of Tetudiant;
      VAR
        fEtud    : Fetudiant;
        etudiant : tetudiant;
    Merci de me sortir de ce problème

  2. #2
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    7 939
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2003
    Messages : 7 939
    Points : 59 417
    Points
    59 417
    Billets dans le blog
    2
    Par défaut
    Bonjour !

    Dans quel genre de structure charges-tu le contenu de ton fichier pour le gérer : une liste chaînée, un tableau ?
    Ton problème se situe-t-il au niveau de la suppression de l'enregistrement en mémoire, lorsque le contenu du fichier a été chargé ?

    Règles du forum
    Cours et tutoriels Pascal, Delphi, Lazarus et Assembleur
    Avant de poser une question, consultez les FAQ Pascal, Delphi, Lazarus et Assembleur
    Mes tutoriels et sources Pascal

    Le problème en ce bas monde est que les imbéciles sont sûrs d'eux et fiers comme des coqs de basse cour, alors que les gens intelligents sont emplis de doute. [Bertrand Russell]
    La tolérance atteindra un tel niveau que les personnes intelligentes seront interdites de toute réflexion afin de ne pas offenser les imbéciles. [Fiodor Mikhaïlovitch Dostoïevski]

  3. #3
    Membre actif Avatar de Ultima
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    223
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2006
    Messages : 223
    Points : 261
    Points
    261
    Par défaut
    Bonjour,
    Voici un exemple de programme qui génère un fichier dans lequel l’étudiant mis en paramètre à été supprimé.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    // cette procédure suprime etu du fichier FicEntre, le résultat est enregistré dans le fichier FicSortie
    // On suppose que les fichiers sont déclarés et ouvert dans les modes adéquats
    procedure suppression( etu : Tetudiant ; FicEntre , FicSortie : Fetudiant);
    var
      item : Tetudiant;
    begin
      while not eof(FicEntre) do
      begin
        read(FicEntre,item);
        if not(item.Nom = etu.Nom) then
          write(FicSortie,item);
      end;
    end;
    Autre déclaration possible (optimisation au niveau de la mémoire).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    procedure suppression(const etu : Tertudiant ; const FicEntre ; var FicSortie : Fetudiant);
    J’espère vous avoir aidé.

  4. #4
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 942
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 942
    Points : 5 654
    Points
    5 654
    Par défaut
    Giu,
    Citation Envoyé par Ultima
    Bonjour,
    Voici un exemple de programme qui génère un fichier dans lequel l’étudiant mis en paramètre à été supprimé.

    J’espère vous avoir aidé.
    Ça ne répond pas à la question posée par Alcatîz. Or, la réponse dépend de ta réponse

    Pour la déclaration de ta procédure, il est clair qu'il faut utiliser la 2ème syntaxe.

    Il faut éviter la copie de si grosses données lors de chaque appel à une fonction.
    Si les cons volaient, il ferait nuit à midi.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 67
    Points : 75
    Points
    75
    Par défaut
    je pense que ma question n'est pas claire:
    alors: je veux que la suppression se faite dans le meme fichier, c-à-d supprime l'étudiant n° x et laisser les autres.
    quelle la commande exacte pour supprimer un fichier
    je veux aussi, une sollution pour trier les enregistrement.

    j'utilise une fichier fiche.dat contenant les etudiants.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
          writeln('Donnez le nom du Fichier … créer SVP :');
          readln(fichier);
          assign(fEtud,fichier);
          rewrite(fEtud);
    .....
    merci de m'aider

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 67
    Points : 75
    Points
    75
    Par défaut Pas de solutions
    alors aucun ne veut répondre,

    j'ai trouvé un solution, mais je ne sais pas est ce qu'elle est bonne:

    je crée un nouveau fichier nommé ficheN.bin, permet d'enregistrer tous les enregistrement sauf l'enregistrement que nous voulons supprimer,
    - supprimer l'ancien fichier.
    - Renommer le nouveau fichier (prend le nom du ancien).



    c'est une bonne solution??????

  7. #7
    Membre actif Avatar de Ultima
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    223
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2006
    Messages : 223
    Points : 261
    Points
    261
    Par défaut
    Citation Envoyé par elhou80
    j'ai trouvé un solution, mais je ne sais pas est ce qu'elle est bonne:

    je crée un nouveau fichier nommé ficheN.bin, permet d'enregistrer tous les enregistrement sauf l'enregistrement que nous voulons supprimer,
    - supprimer l'ancien fichier.
    - Renommer le nouveau fichier (prend le nom du ancien).




    c'est une bonne solution??????
    Bonjour,
    C’est en générale une mauvaise idée de créer un fichier intermédiaire.
    Je pense qu’il est préférable d’utilisé à peut près ce que j’ai déjà proposé, mais cette fois, il faudrait que la procédure crée un tableau contenant les fichiers désiré.
    Ensuite, il suffit de rééditer le fichier initiale (rewrite(fEtud)), et d'y vider le contenu du tableau.
    Non seulement, c’est facile de travailler avec un tableau, mais surtout c’est une économie énorme en matière de vitesse.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    reset(fEtud);
     -- je craie mon tableau
    rewrite(fEtud);
     -- je vide mon tableau dans fEtud

  8. #8
    ALT
    ALT est déconnecté
    Membre émérite
    Avatar de ALT
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2002
    Messages
    1 234
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 234
    Points : 2 338
    Points
    2 338
    Par défaut
    Tout dépend de la mémoire disponible : si le fichier est gros, le charger en mémoire (sous forme de tableau, de liste ou n'importe quoi d'autre) risque d'être rapidement acrobatique.
    Une solution consiste donc à marquer (avec un code que le programmeur choisit en fonction de ses besoins) l'enregistrement comme effacé.
    On ne gagne donc pas de place sur disque, mais l'emplacement de l'enregistrement est disponible pour une nouvelle écriture.
    C'est rapide & efficace.

    Exemple :
    Dans ce cas, il suffit de remplacer le numéro d'inscription par une série de '#' ou de '*' ou de n'importe quoi d'autre, pourvu que ça ne corresponde à aucun numéro possible.
    Quand on liste le fichier, on omet les enregistrements ainsi repérés.
    Quand on veut inscrire un nouvel étudiant, il suffit de rechercher le premier enregistrement marqué & d'écrire les nouvelles données à la place (en gros : on bouche les trous). Et s'il n'y a aucun emplacement libre, on ajoute à la fin.


    Voilà.
    « Un peuple qui est prêt à sacrifier un peu de liberté contre un peu de sécurité, ne mérite ni l'une, ni l'autre, et finira par perdre les deux. »
    Attribué indistinctement à :
    Thomas Jefferson
    Benjamin Franklin
    Albert Einstein !

Discussions similaires

  1. Réponses: 4
    Dernier message: 22/07/2010, 15h46
  2. Problème de suppression d'enregistrement dans un fichier vb6
    Par alighieri dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 10/06/2008, 11h51
  3. Réponses: 7
    Dernier message: 23/07/2006, 17h11
  4. Suppression d'un enregistrement dans un fichier.
    Par Antoine.V dans le forum C
    Réponses: 9
    Dernier message: 08/05/2006, 15h00
  5. enregistrer dans un fichier avec une appli mdi
    Par ferrari dans le forum C++Builder
    Réponses: 4
    Dernier message: 05/05/2002, 15h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo