bonjour
je dois stocker les mots d\'un fichier texte d\'environ 450ko dans une liste chaînée, mais je n\'arrive pas à contourner les limitations de 64ko pour les variables globales en Pascal.
comment faire?
merci

voici mon programme:
[code]
program marqueurSN;

type p_mot_etq = ^mot_etq; { Pointeur … type contenant mot et etq. }
mot_etq = record
mot : string;
etq : string;
suivant : p_mot_etq;
end;
tab_liste = array[1..16383] of p_mot_etq;

var input : text;
ponct : boolean;
c : char;
word,tag : string;
x : integer;

(*content : mot_etq;
liste1 : p_mot_etq;
liste_temp : p_mot_etq;
liste_debut : p_mot_etq;
liste_fin : p_mot_etq;*)

{ Proc‚dure qui donne le code ASCII du caractŠre lu dans le corpus. }
procedure read_char;
begin
read(input,c);
x:=ord(c);
end;

{ Fonction qui construit les elements d\'une liste - les mots du corpus }
{ et les ‚tiquettes. Prend en paramŠtre une chaŒne de caractŠres, qui }
{ correspond … un nom de variable selon qu\'elle construit un mot ou }
{ une ‚tiquette, et un entier qui correspond au code ASCII du d‚limit- }
{ des mots (deux-points quand on ‚crit un mot, \"carriage return\" si }
{ c\'est une ‚tiquette. }

function build_element(element:string; delimiter:integer):string;
var str1 : string;
begin
{ Cette boucle construit les mots et les ‚tiquettes … partir du }
{ fichier corpus donn‚ par concat‚nation de caractŠres. }

read_char;

WHILE (x=35) DO
begin
readln(input);
read_char;
end;

IF ((x=13) OR (eof(input))) THEN
begin
build_element:=\'PONCT\';
end
ELSE
begin
IF (x=10) THEN
read(input,c);
str1:=c;

{ Si un signe de ponctuation est lu on veut arrˆter la }
{ concat‚nation car il n\'y a pas d\'‚tiquette associ‚e. }

ponct:=((c=\',\') OR (c=\'.\') OR (c=\'(\') OR (c=\')\') OR (c=\'-\') OR
(c=\';\') OR (c=\':\') OR (c=\'/\') OR (c=\'?\') OR (c=\'!\') OR
(c=\'\\\') OR (c=\'\"\'));

IF ponct THEN
begin
str1:=c;
end
ELSE
begin
{ La boucle concatŠne les caractŠres jusqu\'… ce qu\'elle }
{ rencontre un d‚limiteur dans le fichier d\'entr‚e. Une fois }
{ la boucle termin‚e, la chaŒne de caractŠres est renvoy‚e }
{ la fonction. }

WHILE not ((x=delimiter) OR (x=26)) DO
begin
read_char;
IF not ((x=delimiter) OR (x=10)) THEN
begin
str1:=str1+c;
end;
end;
end;
build_element:=str1;
end;
end;

{ Pour ajouter un mot … une liste. Ajoute tous les mots et ‚tiquettes }
{ construits … une liste. }
function ajouter_liste(content:mot_etq; liste_mot_etq)_mot_etq;
var u: p_mot_etq;
begin
new(u);
u^.mot:=content.mot;
u^.etq:=content.etq;
u^.suivant:=NIL;
IF liste <> NIL THEN
liste^.suivant:=u;
ajouter_liste:=u;
end;

procedure afficher_liste(liste_mot_etq);
var u : p_mot_etq;
begin
u:=liste;
WHILE u<>NIL DO
begin
writeln(u^.mot,\':\',u^.etq);
u:=u^.suivant;
end;
end;

{ LibŠre la m‚moire occup‚e par la liste. }
procedure detruire_liste(liste_mot_etq);
var u : p_mot_etq;
begin
u:=liste;
WHILE u<>NIL do
begin
u:=u^.suivant;
dispose(liste);
liste:=u;
end;
end;

procedure creer_mots(nom:string; delim1:integer; delim2:integer; varname1:string; varname2:string; state:integer);
var liste1 : p_mot_etq;
liste_temp : p_mot_etq;
content : mot_etq;
begin
new(liste1);
liste1:=NIL;
liste_temp:=NIL;
assign(input,nom);
reset(input);
WHILE not eof(input) DO
begin
IF state=0 THEN
word:=build_element(\'wordvar\',delim1)
ELSE word:=\'\';

tag:=build_element(\'tagvar\',delim2);
content.mot:=word;
content.etq:=tag;
liste1:=ajouter_liste(content,liste1);
IF liste_temp=NIL THEN
liste_temp:=liste1;
end;
close(input);
writeln(\'AFFICHER LA LISTE. FICHIER : \',nom);
afficher_liste(liste_temp);
detruire_liste(liste1);
end;

begin
creer_mots(\'XXX/corpus.txt\',58,13,\'wordvar\',\'tagvar\',0);
creer_mots(\'XXX/SNdebut.txt\',13,13,\'wordvar\',\'tagvar\',1);
creer_mots(\'XXX/SNfin.txt\',13,13,\'wordvar\',\'tagvar\',1);
end.