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 :

Sauvegarde de listes chaînées dans un fichier


Sujet :

Pascal

  1. #1
    Futur Membre du Club
    Inscrit en
    Décembre 2008
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 9
    Points : 5
    Points
    5
    Par défaut Sauvegarde de listes chaînées dans un fichier
    salut
    je suis faible en pascal.
    mon problème est savoir comment stocker dans un fichier texte une liste chainée et la sauvegarder dans le fichier;
    merci beaucoup à tous .

  2. #2
    Rédacteur
    Avatar de darrylsite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 299
    Points : 2 501
    Points
    2 501
    Par défaut
    je suis faible en pascal
    est ce une phrase à la mode sur le forum?

    Et garder une liste chainée dans un fichier ne releve pas du tout du pascal. Il faut d'abord savoir ce qu'on doit faire (phase papier+crayon+paire de neurones) ensuite on essaie de coder en pascal ce qu'on a retenu comme solution.

  3. #3
    Futur Membre du Club
    Inscrit en
    Décembre 2008
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    merci darrylsite

  4. #4
    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 409
    Points
    59 409
    Billets dans le blog
    2
    Par défaut
    Bonjour,

    La première étape pour toi est de créer une routine qui parcourt simplement la liste chaînée. Tu pourras ensuite t'en servir comme ossature et y greffer le code d'écriture dans le fichier.

    As-tu déjà réalisé la première étape ?
    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]

  5. #5
    Futur Membre du Club
    Inscrit en
    Décembre 2008
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    Bonsoir;
    J'ai essayé mais ce n'est pas résolu.
    Voilà mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    program fichier;
    uses wincrt;
     
    type pointeur=^personne;
         personne=record
              nom:string;
         suivant:pointeur;
    end;
    var debut,courant:pointeur;
        rep:char;
        f:text;
     
     
    begin
    assign(f,'c:\wahiba.txt') ;
    rewrite(f);
          new(debut);
          courant:=debut;
    repeat
          write('entrez le nom :  ');
          readln (courant^.nom);
          read (f,courant^.nom);
          write ('outre element o/n?:  ');
          readln  (rep);
          if rep='o' then
          begin
          new(courant^.suivant);
          courant:=courant^.suivant;end
          else courant^.suivant:=nil;
          until rep='n';
    close (f);
    assign (f,'c:\wahiba.txt');
    reset (f);
     
    while not eof (f) do 
          begin
          read (f,courant^.nom);
               writeln ('             voila la liste');
               writeln('nom  ',courant^.nom);
               courant:=courant^.suivant;
     
          end;
          close (f);
    end.
    Enfin merci et bonne nuit.

  6. #6
    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 409
    Points
    59 409
    Billets dans le blog
    2
    Par défaut
    Je n'ai pas eu le temps de regarder attentivement ton code mais un problème saute immédiatement aux yeux : pour écrire dans le fichier, c'est write et non read qu'il faut utiliser.
    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]

  7. #7
    Rédacteur
    Avatar de darrylsite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 299
    Points : 2 501
    Points
    2 501
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
     
    program fichier;
    uses crt;
     
    type pointeur=^personne;
         personne=record
              nom:string;
         suivant:pointeur;
    end;
    var debut,courant:pointeur;
        rep:char;
        f:text;
     
     
    begin
    assign(f,'c:\wahiba.txt') ;
    rewrite(f);
    new(debut);
    courant:=debut;
    repeat
          write('entrez le nom :  ');
          readln (courant^.nom);
          write (f,courant^.nom);
          write ('outre element o/n?:  ');
          readln  (rep);
          if rep='o' then
          begin
          new(courant^.suivant);
          courant:=courant^.suivant;end
          else courant^.suivant:=nil;
          until rep='n';
    close (f);
     
    reset (f);
     
    while not eof (f) do 
          begin
          read (f,courant^.nom);
               writeln ('             voila la liste');
               writeln('nom  ',courant^.nom);
               courant:=courant^.suivant;
     
          end;
          close (f);
    end.
    Le programme marche bien. Mais il n'est pas tres propre. Ce sera mieux si tu separais chaque partie du programme : une procedure pour la creation de la liste chainée, une autre procedure pour la sauvegarde des données dans le fichier, une procedure pour restorer la liste à partir du fichier, ...
    je te donne encore un sacré boulot hein?

  8. #8
    Futur Membre du Club
    Inscrit en
    Décembre 2008
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    bonjour comment ça va?;
    pardon je ne parle pas bien français
    Le programme ne marche pas bien.et je dois faire comment tu dit pour séparer chaque partie dans programme ?
    Mais le problème est comment sauvegarder le fichier et séparer l' affichage de la partie sauvegarde.
    et voila mon nouveau code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    program fichier;
    uses WINCRT;
     
    type pointeur=^personne;
         personne=record
              nom:string;
         suivant:pointeur;
    end;
    var debut,courant:pointeur;
        rep:char;
        f:text;
        choix:integer;
        nom:string;
    {---------------------------------------------} 
                procedure cree (nom:string);
                begin
                assign(f,'c:\wahiba.txt') ;
                rewrite(f);
                new(debut);
                courant:=debut;
                repeat
                write('entrez le nom :  ');
                readln (courant^.nom);
                write (f,courant^.nom);
                write ('outre element o/n?:  ');
                readln  (rep);
                if rep='o' then
                begin
                new(courant^.suivant);
                courant:=courant^.suivant;end
                else courant^.suivant:=nil;
                until rep='n';
                close (f);
     
                reset (f);
                end;
    {----------------------------------------------}
                   procedure affiche (nom:string);
                   begin
                   while not eof (f) do 
                   begin
                   read (f,courant^.nom);
                   writeln ('             voila la liste');
                   writeln('nom  ',courant^.nom);
                   courant:=courant^.suivant;
     
                  end;
                  close (f);
                  end;
    {------------------------------------------------}
    begin
     
     
    writeln      ('1 : pour cree la liste');
    writeln      ('2 : pour affiche la liste');
    repeat
    write      (' donne le choix:  ');
         readln ( choix); 
         if choix=1 then  cree (nom);
         if choix=2 then  affiche (nom);
     
    until choix=5 ;
    end.
    et merci beaucoup.

  9. #9
    Rédacteur
    Avatar de darrylsite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 299
    Points : 2 501
    Points
    2 501
    Par défaut
    j'ai apporté deux ou trois modifications à ton programme.
    tu avais oublié de donner une valeur à la variable nom. Il est aussi preferable d' utiliser writeln au lieu de write pour l'ecriture dans le fichier texte dans ton cas.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
     
    program fichier;
    uses wincrt;
     
     type pointeur=^personne;
          personne=record
                    nom:string;
                    suivant:pointeur;
                   end;
     var debut,courant:pointeur;
         rep:char;
         f:text;
         choix:integer;
         nom:string;
     
    {---------------------------------------------}
    procedure cree (nom:string);
    begin
    assign(f, nom) ;
    rewrite(f);
    new(debut);
    courant:=debut;
    repeat
    write('entrez le nom : ');
    readln (courant^.nom);
    writeln (f,courant^.nom);
    write ('outre element o/n?: ');
    readln (rep);
    if rep='o' then
    begin
    new(courant^.suivant);
    courant:=courant^.suivant;end
    else courant^.suivant:=nil;
    until rep='n';
    close (f);
     
    reset (f);
    end;
    {----------------------------------------------}
    procedure affiche (nom:string);
    begin
    writeln('voila la liste : ');
    while not eof (f) do
    begin
    readln (f,courant^.nom);
    writeln(courant^.nom);
    courant:=courant^.suivant;
     
    end;
    close (f);
    end;
    {------------------------------------------------}
    begin
     
    clrscr;
    nom:='save.txt';
     
    writeln ('1 : pour cree la liste');
    writeln ('2 : pour affiche la liste');
    repeat
    write (' donne le choix: ');
    readln ( choix);
    if choix=1 then cree (nom);
    if choix=2 then affiche (nom);
     
    until choix=5 ;
    end.
    Pense un peu à bien presenter ton code.

  10. #10
    Futur Membre du Club
    Inscrit en
    Décembre 2008
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    merci bc
    mais la programme ne travaile pas.
    Ne voulaient pas executer
    et bonsoir.

  11. #11
    Rédacteur
    Avatar de darrylsite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 299
    Points : 2 501
    Points
    2 501
    Par défaut
    Citation Envoyé par wahiba02 Voir le message
    merci bc
    mais la programme ne travaile pas.
    Ne voulaient pas executer
    et bonsoir.
    j'avoue que je ne comprend pas bien ce que tu as ecrit

  12. #12
    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
    Nia,

    Pour le fun, le code posté par darrylsite remis en forme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    program fichier;
     
    uses wincrt;
     
    type 
        pointeur = ^personne;
        personne = record
            nom: string;
            suivant : pointeur;
        end;
    var 
        debut, courant : pointeur;
        rep : char;
        f : Text;
        choix : integer;
        nom : string;
     
    {---------------------------------------------}
     
    procedure cree(nom : string);
    begin
        Assign(f, nom);
        Rewrite(f);
        New(debut);
        courant := debut;
        repeat
            Write('entrez le nom : ');
            Readln(courant^.nom);
            Writeln(f, courant^.nom);
            Write ('outre element o/n?: ');
            Readln(rep);
            if rep = 'o' then
            begin
                New(courant^.suivant);
                courant := courant^.suivant;
            end
            else 
                courant^.suivant := nil;
        until rep = 'n';
        Close(f);
     
        Reset(f);
    end;
     
    {----------------------------------------------}
     
    procedure affiche(nom : string);
    begin
        Writeln('voila la liste : ');
        while not Eof(f) do
        begin
            Readln(f, courant^.nom);
            Writeln(courant^.nom);
            courant := courant^.suivant;
        end;
        Close(f);
    end;
     
    {------------------------------------------------}
     
    begin
        clrscr;
        nom := 'save.txt';
     
        Writeln('1 : pour cree la liste');
        Writeln('2 : pour affiche la liste');
        repeat
            Write (' donne le choix: ');
            Readln(choix);
            if choix = 1 then 
                cree(nom);
            if choix = 2 then 
                affiche(nom);
     
        until choix = 5;
    end.
    Pour wahiba02 :

    Des variables globales en veux-tu, en voilà. À proscrire.

    Une procédure/fonction doit recevoir en paramètre toutes les données dont elle a besoin.
    Si les cons volaient, il ferait nuit à midi.

  13. #13
    Futur Membre du Club
    Inscrit en
    Décembre 2008
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    bonsoir.
    le probleme qui reste est ne affiche pas la lasite a executer le programe.
    or dans sélecte le choix 2 le programme plouqe.
    merci a tout.

  14. #14
    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
    Bou,
    Citation Envoyé par wahiba02 Voir le message
    bonsoir.
    le probleme qui reste est ne affiche pas la lasite a executer le programe.
    or dans sélecte le choix 2 le programme plouqe.
    merci a tout.
    Là, j'avoue avoir besoin d'un décodeur.

    Même sans parler le français parfaitement, un petit effort est nécessaire, au moins pour utiliser les bons mots correctement orthographiés.
    La syntaxe est moins importante si les mots sont corrects (enfin, pas toujours, mais pour des phrases simples, c'est généralement vrai).
    Si les cons volaient, il ferait nuit à midi.

Discussions similaires

  1. Recuperation d'une chaîne dans un fichier
    Par black is beautiful dans le forum Windows
    Réponses: 3
    Dernier message: 20/03/2006, 18h57
  2. enregistrer une liste chainée dans un fichier?
    Par ALF-Teams dans le forum C
    Réponses: 7
    Dernier message: 08/03/2006, 18h42
  3. Sauvegarder/Lire une classe dans un fichier
    Par Rodrigue dans le forum C++
    Réponses: 10
    Dernier message: 10/09/2005, 14h12
  4. [Stratégie]Sauvegarde d'une liste chainée dans un fichier
    Par BernardT dans le forum Général Java
    Réponses: 17
    Dernier message: 25/07/2005, 17h04
  5. [D6] Comment remplacer des chaînes dans un fichier ?
    Par fabien25 dans le forum Langage
    Réponses: 4
    Dernier message: 15/06/2005, 13h37

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