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

Langage Pascal Discussion :

[LG]Probleme lecture fichier file of ....


Sujet :

Langage Pascal

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 7
    Points : 5
    Points
    5
    Par défaut [LG]Probleme lecture fichier file of ....
    Bonjour

    J'ai un probléme pour la lecture d'un fichier file of .... , voici la partie ou j'encode les données ds mon 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
                   assign (nb, 'id') ;
                   reset (nb) ;
                   read (nb, id) ;
                   close (nb) ;
                   rewrite (nb) ;
                   id := id + 1;
                   write (nb, id) ;
                   assign (clt, 'ls_clt') ;
                   reset (clt) ;
                   client[id].id := id ;
                   client[id].clit := nom ;
                   client[id].pre := prenom ;
                   Seek(clt,FileSize(clt)) ;
                   write(clt, client) ;
                   close (nb) ;
                   close (clt) ;
    Puis Arrive les problemes, j'ai une procedure qui lit le nom en donnée, ce nom est donné comme parametre à la fonction ci dessous...le rôle de cette fonction est de trouve l'id du fichier mais j'ai une erreur 202


    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
    function op_clt (var nom : string) : string ;
    var clt : file of t_client ;
        nb  : file of integer ;
        id, i  : integer ;
        etat   : byte ;
        client : t_client ;
     
        c, v, pre, p   : string ;
             begin
                  chdir ('client') ;
                  assign (clt, 'ls_clt') ;
                  reset (clt) ;
                  i := 1 ;
                  etat := 0 ;
                  while not  EOF(clt) do
                      Begin
     
                           c := client[i].clit ;
                           if (c = nom) then
                              Begin
                              if  (etat = 1) then
                                  Begin
                                       write ('Le Prenom : ') ;
                                       readln (pre) ;
                                       while not EOF(clt) do
                                             Begin
                                                  p := client[i].pre ;
                                                  if (p = pre) then
                                                     Begin
                                                          str((client[i].id), v) ;
                                                     End ;
                                                  i := i + 1 ;
                                             End ;
                                  End ;
                                  Str((client[i].id), v) ;
                                  etat := etat + 1 ;
                              End ;
     
                           i := i + 1 ;
                      End ;
                  op_clt := v ;
                  if (etat = 0 ) then
                     writeln ('Nom de client inconnu.') ;
             End ;
    Comment regle cette erreur 202 ?

    Merci

  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
    Euh il me semble que ton code n'est pas très propre :S
    Pourquoi ne pas passer le nom et le prénom directement en paramètre ?
    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
     
    function op_clt (nom,prenom:string):string; 
    var clt : file of t_client ; 
          id, i  : integer ; 
          client : t_client ; 
          c, v, pre, p   : string ; 
          trouve:boolean;
          begin 
          chdir ('client') ; 
          assign (clt, 'ls_clt') ; 
          reset (clt) ; 
          trouve:=false;
          while ((not EOF(clt)) and (not trouve)) do 
          Begin 
          readln(clt,client); 
          if ((client.clit=nom) and (client.pre=prenom)) then
          begin
          trouve:=true;
          str(client.id,v);
          end;
          end;
          close(clt);
          if trouve then op_clt:=v else op_clt:='pas trouvé';
          end;
    Je sais pas si ca va convenir mais c'est plus simple que ce que tu as fait !!

    a+
    M.Dlb - Modérateur z/OS - Rédacteur et Modérateur Pascal

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par wormful_sickfoot
    Euh il me semble que ton code n'est pas très propre :S
    Pourquoi ne pas passer le nom et le prénom directement en paramètre ?
    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
     
    function op_clt (nom,prenom:string):string; 
    var clt : file of t_client ; 
          id, i  : integer ; 
          client : t_client ; 
          c, v, pre, p   : string ; 
          trouve:boolean;
          begin 
          chdir ('client') ; 
          assign (clt, 'ls_clt') ; 
          reset (clt) ; 
          trouve:=false;
          while ((not EOF(clt)) and (not trouve)) do 
          Begin 
          readln(clt,client); 
          if ((client.clit=nom) and (client.pre=prenom)) then
          begin
          trouve:=true;
          str(client.id,v);
          end;
          end;
          close(clt);
          if trouve then op_clt:=v else op_clt:='pas trouvé';
          end;
    Je sais pas si ca va convenir mais c'est plus simple que ce que tu as fait !!

    a+
    Voila, avec la fonction j'ai cette erreur et la ligne est surligne en vert : comment resoudre cette erreur ?

    USER BREAK IN LINE 37

    la fonction
    function op_clt (var nom : string; pren : string) : string ;
    var clt : file of t_client ;

    i : integer ;
    c, v, p : string ;
    begin
    chdir ('client') ;
    assign (clt, 'ls_clt') ;
    reset (clt) ;
    i := 1 ;
    while not eof(clt) do
    Begin
    c := client[i].clit ;C CETTE LIGNE QUI EST SURLIGNE EN VERT
    p := client[i].pre ;
    if ((c = nom) And (p = pren)) then
    Str(client[i].id, v) ;
    End ;
    op_clt := v ;
    End ;

    Le prog reste bloqué : je dois sortie à l'aide de CTRL+PAUSE.


    Merci

  4. #4
    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
    C'est normal, tu ne lis pas dans le fichier...
    Tu devrais utiliser ma fonction sans trop la modifier je pense !
    Le boolean trouve est indispensable sinon tu ne pourra pas vérifier si le nom du client existe dans le fichier...

    a+
    M.Dlb - Modérateur z/OS - Rédacteur et Modérateur Pascal

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par wormful_sickfoot
    C'est normal, tu ne lis pas dans le fichier...
    Tu devrais utiliser ma fonction sans trop la modifier je pense !
    Le boolean trouve est indispensable sinon tu ne pourra pas vérifier si le nom du client existe dans le fichier...

    a+
    merci à toi, j'avance doucement mais surement mais le fait est que j'ai toujours une erreur 202 : Stack Overflow et je ne sais pas comment la relge ?

  6. #6
    Membre averti Avatar de charly
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    329
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 329
    Points : 358
    Points
    358
    Par défaut
    tu depace la piles memoires , il faut que tu revois a la baisse le nombre de variable allouer , et si c est pas possible que tu accedes a un autre type de memoire . par contre me demmende pas comment
    6*8 =42

  7. #7
    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
    Pour résoudre cette erreur, tu peux utiliser la directive {$M}. Pour plus d'informations, regarde l'aide de ton compilateur, ou cherche des messages s'y référant dans le forum !

    a+
    M.Dlb - Modérateur z/OS - Rédacteur et Modérateur Pascal

  8. #8
    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
    Pour information, si ton compilateur est bien configuré, tu ne devrais pas obtenir de telles erreurs... Cela veut peut-être dire que ton code n'est pas très propre, que tu utilises trop de variables, comme l'a dit Charly, ...
    Revois ton code, et essaye de le solidifier !
    a+
    M.Dlb - Modérateur z/OS - Rédacteur et Modérateur Pascal

  9. #9
    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 417
    Points
    59 417
    Billets dans le blog
    2
    Par défaut
    Salut !

    Pourrais-tu nous donner la déclaration de ton type t_client, s.t.p ?

    Le fait de créer une variable dans une procédure ou dans une fonction consomme de l'espace dans la pile (dont la taille est relativement limitée).
    Tandis que si tu la déclares comme variable globale, elle consommera de l'espace dans le segment de données.

    Cette toute petite modification pourrait peut-être solutionner ton problème de débordement de pile ?
    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]

  10. #10
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par Alcatîz
    Salut !

    Pourrais-tu nous donner la déclaration de ton type t_client, s.t.p ?

    Le fait de créer une variable dans une procédure ou dans une fonction consomme de l'espace dans la pile (dont la taille est relativement limitée).
    Tandis que si tu la déclares comme variable globale, elle consommera de l'espace dans le segment de données.

    Cette toute petite modification pourrait peut-être solutionner ton problème de débordement de pile ?
    Salut !!

    voici le type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    type t_lsclt = record
         id      : integer    ;
         nom     : string[15] ;
         prenom  : string[15] ;
    End ;
    Le nom à changé car j'ai revu une bonne partie du prog sous les conseils de wormful_sickfoot...

    En fait, la fonction consiste à :

    - lire le nom et prenom fournis en données.
    - compare le nom et prenom avec ceux present ds le fichier de type t_lsclt
    - si le meme me donne l'id pour que je puisse ouvrir le fichier dont le nom est l'id. c tous

    Mais je ne suis pas encore là et j'espere pouvoir compte sur votre aide quand j'y serai.


    J'ai toujours lu qu'il valait mieu avoir des variables locales que globales, est ce vrai aussi en pascal ?


    Grand Merci à Vous.

  11. #11
    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
    Hé bien, comme l'a dit Alcatîz, les variables globales ne doivent pas être trop "grosses" en mémoire, car la pile peut exploser... De manière générale, les variables locales sont assez utiles, si elles ont un but précis... Conceptuellement, les variables locales ne doivent être utilisées que dans des procédures et fonctions... Cela veut tout dire : si ta procédure a besoin d'une variable pour fonctionner mais que le reste du programme n'en a pas besoin, alors cette variable sera déclarée en local. De la même façon, si cette variable peut être utilisée dans d'autres procédures, il vaudra mieux la déclarer en global ! Cette règle fonctionne pour toutes les variables, sauf pour les variables qui prennent de la place en mémoire ( typiquement, les enregistrements, et les objets ). Traditionnellement, on préfèrera les déclarer en global ( ou faire un pointeur dessus puis les déclarer dynamiquement... ).

    a+
    M.Dlb - Modérateur z/OS - Rédacteur et Modérateur Pascal

  12. #12
    Membre averti Avatar de charly
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    329
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 329
    Points : 358
    Points
    358
    Par défaut
    tous sa pour dire , si la memoire explose vo mieu pas avoire window c est pas beau a voire
    6*8 =42

Discussions similaires

  1. [Debutant] Probleme lecture fichier
    Par TraPpeur dans le forum Débuter
    Réponses: 6
    Dernier message: 21/03/2006, 21h11
  2. [VB]Probleme lecture fichier text et affichage
    Par clochardevobsy dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 10/03/2006, 08h46
  3. Probleme lecture fichier acces sequentiel
    Par ouar dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 23/09/2005, 13h39
  4. Probleme lecture fichier
    Par CaptainChoc dans le forum C++
    Réponses: 5
    Dernier message: 06/03/2005, 10h40
  5. [LG]probleme lecture fichier
    Par yp036871 dans le forum Langage
    Réponses: 2
    Dernier message: 28/01/2004, 19h22

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