Problème de lecture de fin de fichier (eof(fichier))
Bonjour à tous... voila après maints et maints essais, je me vois dans l'obligation de venir sur mon gentil forum informatique vous exposer mon problème... Effectivement, je dois copier le contenu d'un fichier texte dans un tableau de strings... Je voudrais qu'à chaque mot contenu dans le fichier soit allouée une case... Je vous entends déjà dire d'ici que c'est facile... mais pour un apprenti en programmation de 16 ans c'est déjà assez compliqué... Voici donc mon code, le problème est qu'il ne lit pas le dernier mot du fichier et donc ne lui alloue aucune case... J'ai aussi inclus un "write" qui permet de voir ce que contient vraiment le fichier... :
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
| program test;
uses sysutils,crt;
const EMPLACEMENTFICHIER='C:\programmation\fichier.txt';
type
recordrecherche = record
mot : string;
numligne : integer;
numposmot : integer;
end;
tableau1 = array[1..1000000] of string;
tableau2 = array[1..1000000] of recordrecherche;
var car:char;
temporaire:string;
fichier: text;
tableaurecherche:tableau1;
tableaurecit:tableau2;
compteurmot:integer;
ok:boolean;
begin
assign (fichier, EMPLACEMENTFICHIER);
reset(fichier) ;
compteurmot:=1;
while ( not(eof(fichier) ) ) do
begin
read(fichier, car);
while (car <> ' ' ) do
begin
temporaire:= (temporaire+car);
read (fichier, car);
end;
tableaurecherche[compteurmot]:=(temporaire);
temporaire:=('');
writeln(tableaurecherche[compteurmot]); //pour verifier que le tableau est initialisé//
compteurmot:=(compteurmot+1);
end;
close(fichier);
end. |
Ca c'est pour le premier programme qui copie le fichier en un tableau de strings... Et voici mon deuxième code qui, lui, copie le contenu d'un fichier de texte, dans un tableau de records à 3 champs (un champ de mot : string, un champ de position de mot (pour savoir sa place dans la ligne) et un champ de numéro de ligne pour savoir à quelle ligne il est dans le texte ;) ) et là le problème est plus ou moins similaire... Disons que j'aimeraiq savoir ce qui cloche... en sachant qu'il faut absolument que cela m'affiche le mot, sa position dans la ligne et le numéro de sa ligne... d'où l'usage de 2 compteurs, un qui s'incrémente avec le eoln (end of line) pour savoir quand on passe à une autre ligne... (mais mon end of line ne fonctionne pas)... Enfin le voici, votre aide sera précieuse et me permettrait d'avancer... :
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 69 70 71 72 73 74
| program test;
uses sysutils,crt;
const EMPLACEMENTFICHIER='C:\Documents and Settings\Gilles\Mes documents\Mes fichiers reçus\fichier.txt';
type
recordrecherche = record
mot : string;
numligne : integer;
numposmot : integer;
end;
tableau1 = array[1..1000000] of string;
tableau2 = array[1..1000000] of recordrecherche;
var car:char;
temporaire:string;
fichier: text;
tableaurecherche:tableau1;
tableaurecit:tableau2;
compteurmot:integer;
compteurligne,avancementtableau:integer;
begin
assign (fichier, EMPLACEMENTFICHIER);
reset(fichier) ;
compteurmot:=1;
compteurligne:=1;
avancementtableau:=1;
while ( not(eof(fichier) ) ) do
begin
read(fichier, car);
while (car <> ' ' ) do
begin
temporaire:= (temporaire+car);
read (fichier, car);
end;
if (eoln(fichier)) then begin
compteurligne:=(compteurligne+1);
compteurmot:=1;
end;
tableaurecit[avancementtableau].mot:=(temporaire);
tableaurecit[avancementtableau].numligne:=(compteurligne);
tableaurecit[avancementtableau].numposmot:=(compteurmot);
temporaire:=('');
write(tableaurecit[avancementtableau].mot);
write(' ');write(tableaurecit[avancementtableau].numposmot);
write(' ');writeln(tableaurecit[avancementtableau].numligne);
compteurmot:=(compteurmot+1);
avancementtableau:=(avancementtableau+1);
end;
close(fichier);
end. |
Merci à tous pour votre attention, au plaisir de vous lire, Julien.