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 de fichiers texte


Sujet :

Pascal

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2005
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2005
    Messages : 18
    Par défaut Lecture de fichiers texte


    J'ai converti un fichier Excel en fichier Texte en vue de créer une procédure qui me donnerait les valeurs des cellules du fichier texte.
    A la lecture du fichier texte j'ai constaté que les variables recherchées étaient séparées par un caractère chr(9).D'où l'idée de trouver les valeurs cherchées par la lecture de la ligne caractère par caractère jusqu'à la position 1 -1 de chr(9) .ensuite de la position 1+1 jusqu'à la position 2 -1 de chr(9) etc. jusqu'à ma ma sième variable.
    J'étais heureux mais j'ai vite déchanté cela n'allait plus pour les autres lignes.
    Pourquoi? Où est mon erreur? c'est ce que je vous demande ou alors comment faire ?
    Voici mon code

    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
    program joueursH;
    uses dos,crt,printer;
     
    var
       f:text;
       i,j,k,l,x,y:integer;
       z,ch:char;
       nclub,lf,nomjou,prenom,clt,affi:string;
       sep:array[1..40] of integer;
     
     
    begin
       {initialisation des variables }
       nclub:='';lf:='';nomjou:='';prenom:='';clt:='';affi:='';x:=0;y:=0;l:=0;
       z:=chr(9);
       {ouverture du fichier texte issu du fichier Excel }
       assign(f,'e:\tennis\advers.txt');
       {$i-} reset(f) {$i+}:
       if ioresult=0 then 
       begin
          writeln('le fichier n'existe pas');ch:=readkey;
          halt;
       end;
       while not eof(f) then
       begin
          {lecture d'une ligne.Ce que je cherche c'est d'accéder à une  ligne     déteminée selon la valeur de lf }
          readln(f,ligne);l:=length(ligne);
          for j:=1 to l do
          begin
             x:=x+1;
             if ligne[j]=z then
             begin
                y:=y+1;
                sep[y]:=x; {détermination des positions de z }
             end;
          end;
        for k:=1 to sep[1]-1 do
        begin
            nclub:=lnclub+ligne[k]; attribution de la variable nclub par lecture caractère par caractère}
        end;
        {idem pour la variable lf de la position sep[1]+1 à sep[2]-1}
        {idem pour nomjou de sep[2]+1 à sep[3]-1}
        {idem pour prenom de sep[3]+1 à sep[4]-1}
        {idem pour clt de sep[4]+1 à sep[5]-1}
        {idem pour affi de sep[5]+1 à l (longueur de la chaine }
        {mise à nul des variables}
        for k:=1 to 6 do sep[k$:=0;
        nclub:='';lf:='';nomjou:='';prenom:='';clt:='';affi:='';l:=0;
        writeln(nclub,' ',lf,' ',nomjou,' ',prenom,' ',clt,' ',affi);
        ch:=readkey;
        { j'ai des valeurs après traitement de la première ligne}
        end;   
        close(f);
    end.
    Comme dit plus haut mon programme tourne pour la première ligne mais aucune valeur pour la suite bien que je lis les longueurs de ligne pour tout mon fichier.


    Merci à tous ceux qui m'aideront à résoudre ce problème.

    A très bientôt ,j'espère ,sur le forum

    Rogerone

  2. #2
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    8 039
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

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

    Informations forums :
    Inscription : Mars 2003
    Messages : 8 039
    Billets dans le blog
    2
    Par défaut
    Bonjour,
    Citation Envoyé par rogerone
    Comme dit plus haut mon programme tourne pour la première ligne
    Comment as-tu pu faire tourner ce code truffé d'erreurs de syntaxe ?
    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]

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2005
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2005
    Messages : 18
    Par défaut lecture des fichiers textes
    Bonjour,
    suite aux remarques du modérateur voici le code de mon programme qui tourne.
    Je l'avais recopié en l'agrémentant de commentaires et en le simplifiant.Mal m'en a pris .J'avoue ne pas l'avoir relu.
    Je le recopie

    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
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    Program joueursH;
     
    Uses dos,crt,printer;
     
    const:ecran=$b800;
     
    var
       f:text;
       i,j,k,l,x,y:integer;
       nclub,lf,nomjou,prenom,clt,affi:string;
       ch,z;char;
       sep:array[1..5] of integer;
     
    begin
        {initialisation des variables}
        nclub:=' ';lf:=' ';nomjou:=' ';prenom:=' ';clt:=' ';affi:=' ';l:=0;x:=0;y:=0;
        z:=chr(9);ligne:=' ';
        clrscr;
        {ouverture du fichier texte issu du fichier Excel}
        assign(f,'e:\tennis\ficadv.txt');
        {$i-} reset(f) {$i+} ;
         if ioresult<>0 then
         begin
             writeln('le fichier n''existe pas');ch:=readkey;
             exit;
         end; 
         { lecture du fichier }
         while not eof(f) do
         begin
             l:=0;
             readln(f,ligne);
             l:=length(ligne);
             {recherche des positions de z dans la ligne}     
             for j:=1 to l do
             begin
                 x:=x+1;
                 if ligne[j]=z then
                 begin
                     y:=y+1;
                     sep[y]:=x;
                 end;
             end;
             {construction de la variable nclub}
             for k:=1 to sep[1]-1 do
             begin
                 nclub:=nclub+ligne[k];
                 writeln(nclub);ch:=readkey;{pour lire les résultats de l'opération}
             end;
     
             for k:=sep[1]+1 to sep[2]-1 do
             begin
                 lf:=lf+ligne[k];
                 writeln(lf);ch:=readkey;
             end;
     
             for k:=sep[2]+1 to sep[3]-1 do
             begin
                 nomjou:=nomjou+ligne[k] ;
                 writeln(nomjou);ch:=readkey;
             end;
     
              for k:=sep[3]+1 to sep[4]-1 do
              begin
                  prenom:=prenom+ligne[k];
                  writeln(prenom);ch:=readkey;
              end;
     
             for k:= sep[4]+1 to sep[5]-1 do
             begin
                 clt:=clt+ligne[k];
                 writeln(clt);ch:=readkey;
             end;
     
             for k:= sep[5]-1 to l do
             begin
                 affi:=affi+ligne[k];ch:=readkey;
              end;
             {mise à blanc des variables }
             nclub:=' ';lf:=' ';nomjou:=' ';clt:=' ';affi:=' ';l:=0;x:=0;y:=0;
             for k:=1 to 5 do
             begin
                 sep[i]:=0;
             end;
         end;
         close(f);
    end.


    J'ai relu .Evidemment je ne sais pas faire tourner ce programme pour éventuellement retrouver une erreur.Je ne suis pas parvenu à faire un copier-coller de mon programme original.
    Je rappelle que ce programme ne donne des résultats que pour la première ligne.

    Merci de m'aider et ne m'en voulez pas trop pour mes erreurs de mon premier message.

    A bientôt sur le forum ,j'espère.



    Rogerone

  4. #4
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 967
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 967
    Par défaut
    Jao,

    Sans avoir le contenu exact de ton fichier, ou au moins les quelques premières lignes, il est impossible de tester réellement, et donc de corriger les erreurs.
    Il faut également nous dire à quoi correspondent les données se trouvant sur chaque ligne, ça évitera qu'on doive totalement dépouiller ton code pour voir ce que tu cherches à faire.

    D'autre part, quand tu initialises des chaînes comme ceci:
    j'espère que tu es conscient que la chaîne n'est pas vide, et que l'espace que tu mets est nécessaire à ton programme.

    Je n'ai regardé plus en détail, faute de connaître le contenu précis de ton fichier.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Février 2005
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2005
    Messages : 18
    Par défaut lecture des fichiers texte
    Bonjour "droggo",

    et surtout merci de t'être penché sur mon problème.
    En ce qui concerne le fichier texte il contient ,disons six variables (correspondant aux six colonnes de mon fichier Excel sauvé en fichier texte)
    1-string de maximum 6 caractères (nclub)
    2-byte (lf)
    3-string limité à 25 caractères (nomjou)
    4-string limité à 15 caractères (prenom)
    5-string fixe de 2 carcatères (clt)
    6-string fixe de 6 caractères. (affi)

    Le nombre de lignes pourrait être très élevé (plusieurs centaines)

    Exemple
    ligne 1
    N130 15 Guyot Roger B0 123456 {chaque donnée est séparée par le caractère de chr(9)
    ligne 2
    N130 123 Guyot Valentin E4 135790
    ligne 3
    N040 1 Gilon Etienne B6 478921
    ligne 4
    WVL125 145 Dardenne Jean NC 456789

    Ce que je cherche c'est de pouvoir attibuer ces valeurs à des variables qui me serviront dans un autre programme.En fait en dernier ressort ce sera une procédure dans un programme Pascal existant.

    L'initialisation des variables est effectivement à vide et non pas à un caractère.


    Merci encore et à bientôt sur le forum


    Rogerone

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

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 466
    Par défaut
    Ne serait-il pas plus judicieux, comme les tailles des chaînes sont fixées, d'utiliser des enregistrements, plutot que des variables "libres" ?

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Février 2005
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2005
    Messages : 18
    Par défaut lecture des fichiers texte
    Bonjour à wormful-sickfoot,

    Je cherche à résoudre un problème.Mon programme n'est qu'une esquissse.
    Il est vrai que je n'ai jamais pensé à utiliser des enregistrements plutôt que des variables.Mais les enregistrements ne sont-ils pas réservés aux fichiers séquentiels? Le fichier que je lis est un fichier issu de Excel et je ne vois pas comment faire pour le transformer en un fichier séquentiel.

    Merci de m'aider et de m'orienter vers d'autres solutions.

    Rogerone

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

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 466
    Par défaut
    Oui effectivement, c'est délicat de lire des enregistrements, à partir d'un fichier texte formaté ainsi. Celà dit, tu peux lire ton fichier texte puis ensuite stocker les informations dans des enregistrements ? Si il n'y en a pas trop c'est faisable dans un tableau. Sinon il faudra passer par des listes chaînées peut-être...

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Février 2005
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2005
    Messages : 18
    Par défaut lecture des fichiers texte
    Bonjour wormful-sickfoot,

    Merci pour tes conseils.J'ai appris ce matin que j'avais un petit millier d'enregistrments !De plus les listes chainées ne m'inspire guère.
    Droggo m'a donné un type de programme qui me donne les résultats que j'attendais.Néanmoins à titre d'exercice je me penche sur tes recommendations

    Bonne journée


    Rogerone

  10. #10
    Membre Expert
    Avatar de Loceka
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    2 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 2 276
    Par défaut
    Ton problème vient de ta variable x qui n'est jamais réinitialisée (y non plus d'ailleurs, ça devrait poser problème).

    Qui plus est cette variable x n'a pas lieu d'être vu qu'elle est sencée indiqué la position actuelle dans la ligne mais ta variable de boucle j le fait déjà...

    Edit :
    en lisant ton code jusqu'au bout je vois que tu fais certaines réinitialisations en fin de boucle.
    Ce n'est pas faux, mais on préfère en général les faire en début pour des raisons de clarté. D'ailleurs tu verrais que certaines de tes initialisations sont dans ce cas redondantes ou inutiles (les fait de réinitialiser sep par exemple).

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Février 2005
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2005
    Messages : 18
    Par défaut lecture de fichiers texte
    Bonjour à tous,
    Merci à Loceka d'avoir vérifié mon programme.Effectivement j'avais omis d'initialiser certaines variables.Mais après avoir tenu compte de toutes vos remarques ,le programme qui n'est sans doute pas un modèle "tourne" et me donne les résultats désirés.

    Merci encore à tous et à une prochaine rencontre.

    Rogerone

  12. #12
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 967
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 967
    Par défaut
    Hoa,

    N'ayant pas été très disponible ces derniers jours, je n'ai même pas eu le temps de lire le code en entier

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 08/11/2006, 20h57
  2. [C#]Lecture gros fichier texte
    Par kekesilo dans le forum Windows Forms
    Réponses: 5
    Dernier message: 20/05/2006, 13h58
  3. Lecture d´un fichier texte .
    Par pilouface dans le forum C
    Réponses: 5
    Dernier message: 20/01/2006, 23h48
  4. [AS2] Lecture Ecriture Fichier Texte
    Par cpr0 dans le forum ActionScript 1 & ActionScript 2
    Réponses: 4
    Dernier message: 13/09/2005, 11h22
  5. lecture de fichier texte
    Par prorider dans le forum C
    Réponses: 36
    Dernier message: 08/09/2004, 20h55

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