Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 12 sur 12
  1. #1
    Membre à l'essai
    Homme Profil pro abdou monta
    Étudiant
    Inscrit en
    mai 2012
    Messages
    71
    Détails du profil
    Informations personnelles :
    Nom : Homme abdou monta
    Localisation : Tunisie

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

    Informations forums :
    Inscription : mai 2012
    Messages : 71
    Points : 21
    Points
    21

    Par défaut ReadLn et WriteLn sur fichier texte

    Bonjour,

    l'erreur se produit à l'entrée de la procédure affichage:
    Code :
    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 331
    Détails du profil
    Informations personnelles :
    Âge : 29

    Informations forums :
    Inscription : avril 2002
    Messages : 2 331
    Points : 3 403
    Points
    3 403

    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 à l'essai
    Homme Profil pro abdou monta
    Étudiant
    Inscrit en
    mai 2012
    Messages
    71
    Détails du profil
    Informations personnelles :
    Nom : Homme abdou monta
    Localisation : Tunisie

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

    Informations forums :
    Inscription : mai 2012
    Messages : 71
    Points : 21
    Points
    21

    Par défaut


    merci..

  4. #4
    Rédacteur/Modérateur
    Avatar de Roland Chastain
    Homme Profil pro Roland Chastain
    Inscrit en
    décembre 2011
    Messages
    1 200
    Détails du profil
    Informations personnelles :
    Nom : Homme Roland Chastain
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : décembre 2011
    Messages : 1 200
    Points : 2 970
    Points
    2 970

    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 :
    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 :
    procedure affichage_fichier ( const pf : text );
    L'Art est long et le Temps est court.

  5. #5
    Expert Confirmé Sénior
    Inscrit en
    août 2006
    Messages
    3 544
    Détails du profil
    Informations forums :
    Inscription : août 2006
    Messages : 3 544
    Points : 4 043
    Points
    4 043

    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 :
    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 :
    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.
    Il court en ce moment une espèce de grippe, mais elle ne court pas très vite, car on peut l'attraper sans courir.

  6. #6
    Membre à l'essai
    Homme Profil pro abdou monta
    Étudiant
    Inscrit en
    mai 2012
    Messages
    71
    Détails du profil
    Informations personnelles :
    Nom : Homme abdou monta
    Localisation : Tunisie

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

    Informations forums :
    Inscription : mai 2012
    Messages : 71
    Points : 21
    Points
    21

    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 :
    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 :
    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é Sénior
    Inscrit en
    août 2006
    Messages
    3 544
    Détails du profil
    Informations forums :
    Inscription : août 2006
    Messages : 3 544
    Points : 4 043
    Points
    4 043

    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.

    Il court en ce moment une espèce de grippe, mais elle ne court pas très vite, car on peut l'attraper sans courir.

  8. #8
    Responsable Pascal

    Avatar de Alcatîz
    Homme Profil pro Jean-Luc Gofflot
    Ressources humaines
    Inscrit en
    mars 2003
    Messages
    6 054
    Détails du profil
    Informations personnelles :
    Nom : Homme Jean-Luc Gofflot
    Âge : 47
    Localisation : Belgique

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

    Informations forums :
    Inscription : mars 2003
    Messages : 6 054
    Points : 37 284
    Points
    37 284

    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
    Tutoriels, exercices, FAQ, sources, compilateurs, outils, livres Pascal
    Mes tutoriels et sources Pascal
    FAQ Assembleur

    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]

  9. #9
    Expert Confirmé Sénior
    Inscrit en
    août 2006
    Messages
    3 544
    Détails du profil
    Informations forums :
    Inscription : août 2006
    Messages : 3 544
    Points : 4 043
    Points
    4 043

    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 ?

    Il court en ce moment une espèce de grippe, mais elle ne court pas très vite, car on peut l'attraper sans courir.

  10. #10
    Responsable Pascal

    Avatar de Alcatîz
    Homme Profil pro Jean-Luc Gofflot
    Ressources humaines
    Inscrit en
    mars 2003
    Messages
    6 054
    Détails du profil
    Informations personnelles :
    Nom : Homme Jean-Luc Gofflot
    Âge : 47
    Localisation : Belgique

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

    Informations forums :
    Inscription : mars 2003
    Messages : 6 054
    Points : 37 284
    Points
    37 284

    Par défaut

    TP n'acceptait pas non plus const.
    Règles du forum
    Tutoriels, exercices, FAQ, sources, compilateurs, outils, livres Pascal
    Mes tutoriels et sources Pascal
    FAQ Assembleur

    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]

  11. #11
    Rédacteur/Modérateur
    Avatar de Roland Chastain
    Homme Profil pro Roland Chastain
    Inscrit en
    décembre 2011
    Messages
    1 200
    Détails du profil
    Informations personnelles :
    Nom : Homme Roland Chastain
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : décembre 2011
    Messages : 1 200
    Points : 2 970
    Points
    2 970

    Par défaut

    Au temps pour moi ! J'ai dit une sottise.

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

    Code :
    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.
    L'Art est long et le Temps est court.

  12. #12
    Expert Confirmé Sénior
    Inscrit en
    août 2006
    Messages
    3 544
    Détails du profil
    Informations forums :
    Inscription : août 2006
    Messages : 3 544
    Points : 4 043
    Points
    4 043

    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.

    Il court en ce moment une espèce de grippe, mais elle ne court pas très vite, car on peut l'attraper sans courir.

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

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •