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 :

Lecture et écriture d'un fichier


Sujet :

Pascal

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 17
    Points : 7
    Points
    7
    Par défaut Lecture et écriture d'un fichier
    Bonjour à toutes et à tous,
    voilà j'ai un problème concernant la lecture et l'écriture d'un fichier.


    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
    var
       c : char;
       ch : string;
       f : text;
     
    BEGIN
     
    Assign(f, 'C:\bidule.txt');
    reset(f);
    while not eof(f) do
      begin
        ch := '';
        read(f,c);
        while c <> ' ' do
          begin
             ch := ch+c;
             read(f,c);
          end;
        write(ch);
      end;
     
    END.

    La compilation marche bien, et l'exécution presque bien. En effet, il m'écrit bien le texte en sorti mais il s'arrête au dernier mot et le programme bug.
    Par exemple, si le dernier mot du texte est de la tondeuse.,
    le texte en sorti n'affichera pas tondeuse. et bloquera sur la fin (impossible de retourner dans Turbo Pascal, la fenêtre de l'exécution est figée ).

    Merci de votre aide !!

    EDIT: Je veux écrire les mots en chaîne par chaîne de caractères et non caractères par caractères sinon je n'aurais pas ce problème là

  2. #2
    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
    Mue,

    Dans ta boucle interne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        while c <> ' ' do
          begin
             ch := ch+c;
             read(f,c);
          end;
    tu cherches à lire tant que tu n'as pas atteint un espace, mais que se passe-t-il quand tu atteins la fin du fichier ?
    Si les cons volaient, il ferait nuit à midi.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 17
    Points : 7
    Points
    7
    Par défaut
    Et bien j'ai déjà essayé de mettre une condition de plus dans ma boucle interne en mettant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    while (c <> ' ') and (not eof(f)) do
          begin
             ch := ch+c;
             read(f,c);
          end;
    mais ca ne marche pas non plus donc je ne comprends pas.

  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
    Xue,
    Citation Envoyé par Archy27 Voir le message
    Et bien j'ai déjà essayé de mettre une condition de plus dans ma boucle interne en mettant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    while (c <> ' ') and (not eof(f)) do
          begin
             ch := ch+c;
             read(f,c);
          end;
    mais ca ne marche pas non plus donc je ne comprends pas.
    Pourquoi le tag "Résolu" si ça ne marche pas ?

    Accessoirement, pourquoi concaténer à ch l'ancienne valeur de c, puis lire c et boucler ?
    Cela signifie que le dernier caractère lu ne sera pas ajouté à ch.
    Si les cons volaient, il ferait nuit à midi.

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 17
    Points : 7
    Points
    7
    Par défaut
    J'ai mis résolu car j'ai réussi à trouver la réponse moi même et je ne pensais pas que tu allais revenir mais c'est bien gentil de ta part .
    Le dernier caractère lu est pourtant bien ajouté à ch car la boucle se termine que lorsque c est un caractère vide (j'ai testé et cela marche).
    Cependant, j'aimerais une petite info si tu as à la réponse à cette question:

    Comment faire pour dire que l'apostrophe ' est un caractère spécifique qu'il faut enelever? Car imaginons que j'ai le mot c'est à découper, il faut donc que je le découpe en c puis est. Mais on ne peut pas dire de

    et j'ai essayé avec le code ASCII approprié mais cela ne marche pas ou alors je me trompe de nombre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if c = chr(32) then ...
    Pas évident de mettre l'apostrophe comme caractère spécifique (je n'ai aucun problème avec tout le reste mais l'apostrophe me pose bien des problèmes à cause justement du fait qu'il faille mettre 2 apostrophes pour signaler un char):


  6. #6
    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
    Quo,

    En Pascal, pour utiliser une apostrophe dans une chaine ou dans un caractère, il faut la doubler:
    Si les cons volaient, il ferait nuit à midi.

  7. #7
    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
    Qio,

    Au fait, j'ai oublié d'ajouter :

    Non, tu ne vas pas au bout de ton fichier si ton code est toujours celui que tu as posté, tu ne gères pas le dernier caractère.
    Ce qui te donne l'impression de le faire, c'est que ta dernière ligne est suivie d'un retour de ligne.

    A titre d'exercice, ouvre ton fichier .txt avec un éditeur, et supprime le saut de ligne après cette dernière ligne, et regarde le résultat de l'exécution de ton programme.
    Si les cons volaient, il ferait nuit à midi.

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

Discussions similaires

  1. lecture et écriture dans un fichier Excel
    Par chebmo90 dans le forum Débuter
    Réponses: 5
    Dernier message: 05/08/2009, 15h15
  2. Lecture et écriture dans un fichier .CSV
    Par yann87 dans le forum API, COM et SDKs
    Réponses: 2
    Dernier message: 03/03/2009, 09h04
  3. Lecture et écriture sur un fichier txt
    Par freemanqc dans le forum Langage
    Réponses: 13
    Dernier message: 28/02/2008, 05h29
  4. lecture et écriture dans un fichier
    Par hamham dans le forum Entrée/Sortie
    Réponses: 8
    Dernier message: 18/12/2007, 15h03

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