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?
assign(f,'e:\tennis\advers.txt'); {ouverture du fichier texte }
{$i-} reset(f) {$i+};
reset(f);
z:=chr(9);
while not eof(f) do
{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 }
begin
l:=0;
readln(f,ligne);
l:=length(ligne);
for j:=1 to l do {je détermine les positions du caractère chr(9) qui sépare mes variables à trouver}
begin
x:=x+1;
if (ligne[j])=chr(9) then
begin
y:=y+1;
sep[y]:=x;
end;
end;
for k:= 1 to sep[1]-1 do
{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 }
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 :
Code :
Program joueursH;
uses dos,crt,printer;
const
ecran=$b800 ;
var
f:text;
ligne:string;
j,k,y:integer;
clt:string;
nomjou:string;
prenom:string;
affi:string;
lf:string;
nclub:string;
sep:array[1..40] of byte;
begin
clrscr;
assign(f,'e:\tennis\advers.txt'); {ouverture du fichier texte }
{$i-} reset(f); {$i+}
while not eof(f) do
{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 }
begin
{ Init ici !!! }
{ mise à blanc de mes variables }
for k:=1 to 5 do sep[k]:=0;
readln(f,ligne);
y := 0; { <-- Init !!! }
for j:=1 to length(ligne) do {je détermine les positions du caractère chr(9) qui sépare mes variables à trouver}
begin
if (ligne[j])=chr(9) then
begin
y:=y+1;
if y > 40 then begin
writeln ( 'ET LA GESTION DES ERREURS NOM D'UN ORDI EN BOIS !' );
halt ( 0 );
end;
sep[y]:=j; { <-- x devient j !!! }
end;
end;
nclub := ''; { <-- Init ici }
for k:= 1 to sep[1]-1 do
{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 }
begin
nclub:=nclub+ligne[k] ;
end;
lf := '';
for k:= sep[1]+1 to sep[2]-1 do
begin
lf:=lf+ligne[k] ;
end;
nomjou := ''; { <-- Init ici }
for k:=sep[2]+1 to sep[3]-1 do
begin
nomjou:=nomjou+ligne[k];
end;
prenom := ''; { <-- Init ici }
for k:=sep[3]+1 to sep[4]-1 do
begin
prenom:=prenom+ligne[k];
end;
clt := ''; { <-- Init ici }
for k:=sep[4]+1 to sep[5]-1 do
begin
clt:=clt+ligne[k];
end;
affi := '';
for k:=sep[5]+1 to l do
begin
affi:=affi+ligne[k];
end;
end;
close(f);
end.
Mais ce n'est vraiment pas beau comme code. Et si tu découvrais les fonctions POS et COPY !
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!