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

Turbo Pascal Discussion :

[TPW] Ecriture dans un fichier typé


Sujet :

Turbo Pascal

  1. #1
    Membre du Club
    Inscrit en
    Juillet 2007
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 45
    Points : 40
    Points
    40
    Par défaut [TPW] Ecriture dans un fichier typé
    à tous,
    je remerci dieu, à cause de ce forum qui m'a aider beaucoup pour faire un pas en avant à la programmation en Pascal. Je vous remerci de tout mon coeur.
    Cette fois j'ai fait un petit prog qui écrit des données dans un fichier typé, ces données sont de type composé, composé d'une phrase et de sa taille.
    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
    program fichier;
    uses wincrt;
     
    type
        phrase=record
               ph : string;
               m : integer;
     
        end;
     
    var
        enreg : phrase;
        f : file of phrase;
        n,i : integer;
     
    procedure taille_n(n : integer);
    begin
         repeat
               write('Donnez le nombre de phrases à saisir : ');
               read(n);
         until n in [1..10];
    end;
     
    begin
        assign(f,'saf.dat');
        rewrite(f);
        taille_n(n);
        for i:=1 to n do
        begin
             writeln('Entrez la',i,'ème phrase : ');
             readln (enreg.ph);
             enreg.m := length (enreg.ph);
             write(f,enreg);
        end;
        close(f);
    end.
    Alors le problème c'est qu'il n'y a pas une résultat aprés l'execution de ce code, seulement l'affichage du message de la saisie de n, par la suite il n'ya pas autre affichage à l'écran qui demande la saisie des phrases, même que le fich est crée mais vide.
    J'éspère que je vais avoir une réponse, je vous remerci tous.

  2. #2
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 949
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 949
    Points : 5 665
    Points
    5 665
    Par défaut
    Lao,

    Citation Envoyé par safowan
    à tous,
    je remerci dieu, à cause de ce forum qui m'a aider beaucoup pour faire un pas en avant à la programmation en Pascal. Je vous remerci de tout mon coeur.
    Cette fois j'ai fait un petit prog qui écrit des données dans un fichier typé, ces données sont de type composé, composé d'une phrase et de sa taille.
    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
    program fichier;
    uses wincrt;
     
    type
        phrase=record
               ph : string;
               m : integer;
     
        end;
     
    var
        enreg : phrase;
        f : file of phrase;
        n,i : integer;
     
    procedure taille_n(n : integer);
    begin
         repeat
               write('Donnez le nombre de phrases à saisir : ');
               read(n);
         until n in [1..10];
    end;
     
    begin
        assign(f,'saf.dat');
        rewrite(f);
        taille_n(n);
        for i:=1 to n do
        begin
             writeln('Entrez la',i,'ème phrase : ');
             readln (enreg.ph);
             enreg.m := length (enreg.ph);
             write(f,enreg);
        end;
        close(f);
    end.
    Alors le problème c'est qu'il n'y a pas une résultat aprés l'execution de ce code, seulement l'affichage du message de la saisie de n, par la suite il n'ya pas autre affichage à l'écran qui demande la saisie des phrases, même que le fich est crée mais vide.
    J'éspère que je vais avoir une réponse, je vous remerci tous.
    Tu es tombé dans un des pièges classsiques : ta procédure
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    procedure taille_n(n : integer);
    reçoit de n une copie locale, c'est ce qu'on appelle un passage de paramètre par valeur.

    Cette copie peut être localement modifiée par la procédure, mais en aucun cela ne modifie la variable d'origine dans le programme principal.

    Pour cela, il faut faire un passage de paramètre par adresse, avec le mot clé var, comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    procedure taille_n(var n : integer);
    D'autre part, comme tu renvoies une valeur d'un type simple, il serait plus logique d'utiliser une fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    function taille_n : integer;
    var
      resultat : integer;
    begin
      repeat
        write('Donnez le nombre de phrases à saisir : ');
        { pour lire au clavier, préférer ReadLn }
        ReadLn(resultat);
      until resultat  in [1..10];
      taille_n := resultat;
    end;
    et son utilisation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ...
      n := taille_n;
    ...

  3. #3
    Membre du Club
    Inscrit en
    Juillet 2007
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 45
    Points : 40
    Points
    40
    Par défaut
    Oh! parfois on fait des erreurs qu'on ne crois jamais qu'on tombe la dessus .
    Alors cette fois avec le même code aprés avoir corrigé mon ancienne erreur (passage pas variable) j'ai eu un autre prob: lors de l'execution, le programme passe pour saisir la 2 ème phrase sans attendre la saisie de la 1 ère.
    et voila un exemple de l'execution:
    Donnez le nombre de phrases à saisir :3
    Entrez la1ème phrase :
    Entrez la2ème phrase :
    là je met ma 1 ère phrase
    Entrez la3ème phrase :
    et là je met la 2 ème
    c'est drole même que j'ai utilisé la boucle while, et aussi j'ai éssayé de faire la saisie du premier enregistrement en dehord de la boucle et la commencer par le 2 ème enregistrement sans aucune difference.

  4. #4
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 949
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 949
    Points : 5 665
    Points
    5 665
    Par défaut
    Joa,

    Je l'ai déjà dit maintes fois : il ne faut pas utiliser Read pour lire des données au clavier, mais ReadLn.

    Tu tombes précisément sur un des problèmes que Read peut poser.

  5. #5
    Membre du Club
    Inscrit en
    Juillet 2007
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 45
    Points : 40
    Points
    40
    Par défaut
    oui c'est ça merci Droggo.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. probleme d'ecriture dans un fichier texte
    Par azrael88370 dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 24/01/2005, 17h33
  2. Script shell - écriture dans un fichier
    Par Leishmaniose dans le forum Linux
    Réponses: 6
    Dernier message: 13/12/2004, 22h48
  3. Probleme d'ecriture dans un fichier en mode Text
    Par bbozet dans le forum C++Builder
    Réponses: 3
    Dernier message: 14/01/2004, 13h46
  4. [LG]ecriture dans un fichier binaire
    Par jsaviola dans le forum Langage
    Réponses: 3
    Dernier message: 26/12/2003, 17h30
  5. Réponses: 2
    Dernier message: 26/09/2003, 14h51

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