Se connecter avec
S'enregistrer | Connectez-vous

lecture d'un fichier texte

Dernière réponse : dans Programmation

Bonjour,

Vous trouverez ci-après le code d'un programmme Pascal qui lit ce fichier afin d'en extraire les valeuurs des lignes.
Ce fichier texte a été créé en convertissant un fichier Excel qui comprenait de multiples lignes et six colonnes.
Le but du programme (qui sera ultérieurement une procédure) est de trouver les valeurs des cellules converties en ligne dans un enregistrement.
J'obtiens ce que je désire ...pour la première ligne et après plus rien.

Où est mon erreur ?Que dois je faire pour lire une ligne quelconque et avoir un bon résultat?
  1. Program joueursH;
  2.  
  3. uses dos,crt,printer ;
  4.  
  5. const
  6. ecran=$b800 ;
  7.  
  8. var
  9. f:text ;
  10. ligne:string;
  11. j,k,i,l,x,y:integer;
  12. clt:string ;
  13. nomjou:string;
  14. prenom:string;
  15. affi:string;
  16. lf:string ;
  17. ch:char;
  18. nclub:string;
  19. sep:array[1..40] of byte;
  20. z:char;
  21. bl:string;
  22. begin
  23. nclub:='';nomjou:='';prenom:='';lf:='';prenom:='' ;clt:='';affi:='';
  24. clrscr;
  25. x:=0;y:=0;
  26. bl:=' ';
  27. assign(f,'e:\tennis\advers.txt'); {ouverture du fichier texte }
  28. {$i-} reset(f) {$i+};
  29. reset(f);
  30. z:=chr(9);
  31.  
  32. while not eof(f) do
  33. {je lis l'entiereté du fichier (je ne pourrais accéder à une 4èmè ligne qu'en lisant les 4 premières et en exploitant la dernière et c'est là que cela ne va plus }
  34. begin
  35. l:=0;
  36.  
  37. readln(f,ligne);
  38. l:=length(ligne);
  39. for j:=1 to l do {je détermine les positions du caractère chr(9) qui sépare mes variables à trouver}
  40. begin
  41. x:=x+1;
  42. if (ligne[j])=chr(9) then
  43. begin
  44. y:=y+1;
  45. sep[y]:=x;
  46. end;
  47. end;
  48.  
  49. for k:= 1 to sep[1]-1 do
  50. {je lis les lignes caractères par caractères pour obtenir la valeur de mes variables ceci marche pour la première ligne mais pas pour les autres }
  51. begin
  52. nclub:=nclub+ligne[k] ;
  53. end;
  54.  
  55. for k:= sep[1]+1 to sep[2]-1 do
  56. begin
  57. lf:=lf+ligne[k] ;
  58. end;
  59.  
  60. for k:=sep[2]+1 to sep[3]-1 do
  61. begin
  62. nomjou:=nomjou+ligne[k];
  63. end;
  64.  
  65. for k:=sep[3]+1 to sep[4]-1 do
  66. begin
  67. prenom:=prenom+ligne[k];
  68. end;
  69.  
  70. for k:=sep[4]+1 to sep[5]-1 do
  71. begin
  72. clt:=clt+ligne[k];
  73. end;
  74. for k:=sep[5]+1 to l do
  75.  
  76. begin
  77. affi:=affi+ligne[k];
  78. end;
  79. {mise à blanc de mes variables }
  80. for k:=1 to 5 do sep[k]:=0;
  81. x:=0;
  82. nclub:='';nomjou:='';prenom:='';lf:='';prenom:='' ;clt:='';affi:='';
  83.  
  84. end;
  85.  
  86. close(f);
  87. end.


J'ai constaté que mon programme ne marchait pas en affichant les valeurs des 6 variables et l'instruction 'ch:=readkey'

Est-ce peut-être la conversion de mon fichier Excel en fichier text qui est erronée? J'ai sauvé le fichier Excel par "Sauver sous "

J'espère avoir été clair et que je pourrais vous lire bientôt sur le forum

A bintôt donc et merci

Rogerone

Autres pages sur : lecture fichier texte

Lassé par la pub ? Créez un compte
Expert Programmation

Pas mal de code mort.
Ex: Lignes 28,29, 2 x reset ! z ? bl ?
(Pleins d'essais ?? ;)  )

Bon, tu as oublié de réinitialiser y !!!!!

Ca donne :
  1. Program joueursH;
  2.  
  3. uses dos,crt,printer;
  4.  
  5. const
  6. ecran=$b800 ;
  7.  
  8. var
  9. f:text;
  10. ligne:string;
  11. j,k,y:integer;
  12. clt:string;
  13. nomjou:string;
  14. prenom:string;
  15. affi:string;
  16. lf:string;
  17. nclub:string;
  18. sep:array[1..40] of byte;
  19. begin
  20. clrscr;
  21.  
  22. assign(f,'e:\tennis\advers.txt'); {ouverture du fichier texte }
  23. {$i-} reset(f); {$i+}
  24.  
  25. while not eof(f) do
  26. {je lis l'entiereté du fichier (je ne pourrais accéder à une 4èmè ligne qu'en lisant les 4 premières et en exploitant la dernière et c'est là que cela ne va plus }
  27. begin
  28. { Init ici !!! }
  29. { mise à blanc de mes variables }
  30. for k:=1 to 5 do sep[k]:=0;
  31.  
  32. readln(f,ligne);
  33. y := 0; { <-- Init !!! }
  34. for j:=1 to length(ligne) do {je détermine les positions du caractère chr(9) qui sépare mes variables à trouver}
  35. begin
  36. if (ligne[j])=chr(9) then
  37. begin
  38. y:=y+1;
  39. if y > 40 then begin
  40. writeln ( 'ET LA GESTION DES ERREURS NOM D'UN ORDI EN BOIS !' );
  41. halt ( 0 );
  42. end;
  43. sep[y]:=j; { <-- x devient j !!! }
  44. end;
  45. end;
  46.  
  47. nclub := ''; { <-- Init ici }
  48. for k:= 1 to sep[1]-1 do
  49. {je lis les lignes caractères par caractères pour obtenir la valeur de mes variables ceci marche pour la première ligne mais pas pour les autres }
  50. begin
  51. nclub:=nclub+ligne[k] ;
  52. end;
  53.  
  54. lf := '';
  55. for k:= sep[1]+1 to sep[2]-1 do
  56. begin
  57. lf:=lf+ligne[k] ;
  58. end;
  59.  
  60. nomjou := ''; { <-- Init ici }
  61. for k:=sep[2]+1 to sep[3]-1 do
  62. begin
  63. nomjou:=nomjou+ligne[k];
  64. end;
  65.  
  66. prenom := ''; { <-- Init ici }
  67. for k:=sep[3]+1 to sep[4]-1 do
  68. begin
  69. prenom:=prenom+ligne[k];
  70. end;
  71.  
  72. clt := ''; { <-- Init ici }
  73. for k:=sep[4]+1 to sep[5]-1 do
  74. begin
  75. clt:=clt+ligne[k];
  76. end;
  77.  
  78. affi := '';
  79. for k:=sep[5]+1 to l do
  80. begin
  81. affi:=affi+ligne[k];
  82. end;
  83. end;
  84.  
  85. close(f);
  86. end.


Mais ce n'est vraiment pas beau comme code. Et si tu découvrais les fonctions POS et COPY !

Exemple à étudier :
  1. procedure LireFichier(const filename: String);
  2. const
  3. SEP = #9;
  4. var
  5. f : TextFile;
  6. s : String;
  7. p, q : Integer;
  8. begin
  9. assign(f, filename);
  10. {$i-} reset(f); {$i+}
  11.  
  12. while not eof(f) do
  13. begin
  14. readln(f, s);
  15.  
  16. p := 1;
  17. while true do
  18. begin
  19. q := pos(SEP, copy(s, p, length(s) - p + 1));
  20. if q = 0 then
  21. begin
  22. writeln(copy(s, p, length(s) - p + 1));
  23. break;
  24. end;
  25. writeln(copy(s, p, q - 1));
  26. p := q + 1;
  27. end;
  28. end;
  29. closefile(f);
  30. end;


Merci à "Zeb" pour cette leçon de programmation.
Je connaissais évidemment ces fonctions mais j'ai cherché sans doute la facilité plutôt que l'efficacité.

Car ton programme me donne les résultats que j'attendais.
Je l'ai étudié comme tu me le demandais et retiendrai ta leçon pour d'autres applications.

Mais si tu as encore le temps ,tu pourrais me renseigner où mon programme "foire" .Le nombre important d'essais tient au fait que j'essayais de voir où le programme ne donnait plus les résultats satisfaisants.C'était un programme d'essai car maintenant j'adopte le tien!

Merci encore


Rogerone
Lassé par la pub ? Créez un compte