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 :

ReadLn et WriteLn sur fichier texte [TPW]


Sujet :

Turbo Pascal

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2012
    Messages : 71
    Points : 59
    Points
    59
    Par défaut ReadLn et WriteLn sur fichier texte
    Bonjour,

    l'erreur se produit à l'entrée de la procédure affichage:
    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
    program test;
    uses wincrt;
    var
    f : text;
    choix : byte;
    procedure affichage_fichier ( var f : text );
    var
    ph : string;
    begin
    while not eof(f) do
    	begin
    		readln(f, ph);
    		writeln(ph);
    	end;
    end;
    procedure remplissage_fichier ( var f : text );
    var
    c : byte;
    ph : string;
    begin
    {$i-}
    reset(f);
    {$i+}
    if ioresult <> 0 then
    	rewrite(f);
    append(f);
    repeat
    	clrscr;
    	write('la pharse à saisie');
    	readln(ph);
    	writeln(f, ph);
    	repeat
    		write('saisir une autre phrase (1 pour oui et 0 pour non)');
    		readln(c);
    	until
    		c in [0..1];
    until
    	c = 0;
    end;
    procedure menu;
    begin
    writeln('1 : affichage du fichier');
    writeln('2 : remplissage de fichier');
    writeln('3 : quitter');
    end;
    procedure boucle ( var choix : byte );
    begin
    repeat
    	clrscr;
    	menu;
    	repeat
    		write('votre choix= ');
    		readln(choix);
    	until
    		choix in [1..3];
    	case choix of
    		1 : affichage_fichier(f);
    		2 : remplissage_fichier(f);
    		3 : donewincrt;
    	end;
    until
    	choix = 3;
    end;
    begin
    assign(f, 'D:\f.txt');
    boucle(choix);
    close(f);
    end.

  2. #2
    Rédacteur/Modérateur
    Avatar de M.Dlb
    Inscrit en
    Avril 2002
    Messages
    2 464
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 464
    Points : 4 311
    Points
    4 311
    Par défaut
    Avec si peu de précisions... Ton fichier n'est pas ouvert, utilise reset ou rewrite.
    M.Dlb - Modérateur z/OS - Rédacteur et Modérateur Pascal

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2012
    Messages : 71
    Points : 59
    Points
    59
    Par défaut

    merci..

  4. #4
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 070
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 070
    Points : 15 454
    Points
    15 454
    Billets dans le blog
    9
    Par défaut
    Bonsoir !

    Il serait plus naturel, me semble-t-il, d'ouvrir et de fermer le fichier à l'intérieur de chaque procédure.

    Une autre remarque, c'est que la valeur du paramètre f n'est jamais modifiée, donc il ne sert à rien d'ajouter le mot-clé var dans l'en-tête de la fonction. Le contenu du fichier change, mais la valeur de f ne change pas (c'est toujours le même fichier).

    En réalité tu n'as même pas besoin de paramètre, puisque tu travailles sur un seul fichier. Tu pourrais donc écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    procedure affichage_fichier;
    Ou alors si tu tiens à conserver le paramètre, il faudrait lui donner un nom différent de celui de la variable globale, pour éviter la confusion :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    procedure affichage_fichier ( const pf : text );
    Mon site personnel consacré à MSEide+MSEgui : msegui.net

  5. #5
    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
    Foe,
    Citation Envoyé par Roland Chastain Voir le message
    En réalité tu n'as même pas besoin de paramètre, puisque tu travailles sur un seul fichier. Tu pourrais donc écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    procedure affichage_fichier;
    Ça, c'est à éviter : les variables globales sont à proscrire.

    Et pour éviter de les utiliser par erreur, on construit le programme ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    program ....
     
    ..... toutes les fonctions
     
    Var
      ...
     
    Begin
    End.
    ce qui fait que toutes les fonctions définies avant les variables ne peuvent pas les utiliser.
    Si les cons volaient, il ferait nuit à midi.

  6. #6
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2012
    Messages : 71
    Points : 59
    Points
    59
    Par défaut
    Citation Envoyé par Roland Chastain Voir le message

    Une autre remarque, c'est que la valeur du paramètre f n'est jamais modifiée, donc il ne sert à rien d'ajouter le mot-clé var dans l'en-tête de la fonction. Le contenu du fichier change, mais la valeur de f ne change pas (c'est toujours le même fichier).

    En réalité tu n'as même pas besoin de paramètre, puisque tu travailles sur un seul fichier. Tu pourrais donc écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    procedure affichage_fichier;
    Ou alors si tu tiens à conserver le paramètre, il faudrait lui donner un nom différent de celui de la variable globale, pour éviter la confusion :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    procedure affichage_fichier ( const pf : text );
    On a commencé l'étude des fichiers depuis quelques semaines ; mon professeur nous a dit que chaque procédure ou fonction où le fichier est parmi ses paramètres, doit être déclaré avec une "var".

  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
    Beo,
    Citation Envoyé par abdou monta Voir le message
    on a commencé l'étude des fichiers depuis quelques semaines, mon professeur nous a dit que [B]chaque[B] procedure ou fonction où le fichier est parmi ses paramétres, doit être déclarer avec une "var".
    Il se trompe :

    Var si la procédure/fonction désire modifier le fichier

    Const dans le cas contraire.

    Si les cons volaient, il ferait nuit à midi.

  8. #8
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    7 937
    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 937
    Points : 59 416
    Points
    59 416
    Billets dans le blog
    2
    Par défaut
    Bonjour,

    Malheureusement, TPW ne connaît pas le mode de transmission de paramètre comme constante. Les deux seuls modes autorisés sont par valeur et par adresse.
    L'inconvénient de travailler avec des compilateurs de l'Age de pierre...
    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]

  9. #9
    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
    Wea,
    Citation Envoyé par Alcatîz Voir le message
    L'inconvénient de travailler avec des compilateurs de l'Age de pierre...
    Ça remonte à loin, mais il me semble que TP - encore plus vieux - acceptait const ?

    Si les cons volaient, il ferait nuit à midi.

  10. #10
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    7 937
    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 937
    Points : 59 416
    Points
    59 416
    Billets dans le blog
    2
    Par défaut
    TP n'acceptait pas non plus const.
    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]

  11. #11
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 070
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 070
    Points : 15 454
    Points
    15 454
    Billets dans le blog
    9
    Par défaut
    Au temps pour moi ! J'ai dit une sottise.

    Je viens d'essayer de compiler le code suivant avec FreePascal :

    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
    program test_fichier;
     
    {$APPTYPE CONSOLE}
     
    var
      f: text;
     
    procedure modifie_fichier(const aF: text);
    begin
      Assign(aF, 'monFichier.txt');
      Rewrite(aF);
      WriteLn(aF, 'essai');
      Close(aF);
    end;
     
    begin
      modifie_fichier(f);
      ReadLn;
    end.
    J'ai obtenu un beau message d'erreur :

    Error: File types must be var parameters
    En fait je n'ai pas l'habitude de passer le fichier en paramètre et j'ai parlé sans savoir. Pour ma part j'utilise toujours une variable globale ou une variable locale.
    Mon site personnel consacré à MSEide+MSEgui : msegui.net

  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
    Doa,
    Citation Envoyé par Alcatîz Voir le message
    TP n'acceptait pas non plus const.
    Alors je confonds avec MS-PASCAL, que j'utilisais bien avant la sortie du premier TP.

    Eh oui, M$ nous avait octroyé un compilateur Pascal, assez performant, sauf côté vitesse de compilation, car il stockait tout sur le disque - pardon, la disquette.

    Si les cons volaient, il ferait nuit à midi.

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

Discussions similaires

  1. [VBA-E] Calcul sur fichiers Texte
    Par anisr dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 04/02/2007, 14h37
  2. Réponses: 2
    Dernier message: 29/05/2006, 09h54
  3. [VB.NET]Problème de lecture et écriture sur fichier texte
    Par zouhib dans le forum Windows Forms
    Réponses: 25
    Dernier message: 23/05/2006, 15h30
  4. Réponses: 11
    Dernier message: 17/05/2006, 10h48
  5. problème sur fichier texte
    Par vivelesgnous dans le forum Général Python
    Réponses: 6
    Dernier message: 26/04/2006, 20h08

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