Erreur sur fonction d'extraction des mots
Bonjour à tous. Je veux mettre en place une fonction qui me permettrait d'obtenir un nombre donné de mots dans une chaîne de caractères chaine. Dans chaine, les mots à ressortir sont séparés du caractère sep.
Voici la structure de la fonction:extraireMots(chaine : string; sep :Char='#';nmots:integer=1):TStrings;
nmots, désigne le nombre de mots:
Par exemple, si je fais:
extraireMots('Bonjour#tues#heureux','#',3), j'obtienne les mots: Bonjour, tues et heureux.
Et si je fais:
extraireMots('Bonjour#tues#heureux','#',2), j'obtienne les deux mots: Bonjour et tues#heureux..
Voici le code que j'ai écrit, en m'inspirant de ce qui est sur la FAQ:
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
|
function extraireMots(chaine : string; sep :Char='#';nmots:integer=1):TStrings;
var
i, n,nbremots : integer;
currentWord : string;
into:TStrings;
begin
into.Clear;
n := length(chaine);
i := 1;
nbremots:=0;
while ((i <= n) and (nbremots<nmots)) do
begin
currentWord := '';
{ on saute les séparateurs }
while (i <= n) and (chaine[i] = sep) do
inc(i);
{ récupération du mot courant }
while (i <= n) and not (chaine[i] = sep) do
begin
currentWord := currentWord + chaine[i];
inc(i);
end;
if (currentWord <> '') then
begin
into.Add(currentWord);
nbremots:=nbremots+1;
end;
end;
if nbremots=nmots then //On va recuperer le reste de la chaine pour former le dernier mot
begin
currentWord:='';
while (i<=n) do
begin
currentWord:=currentWord+chaine[i];
inc(i);
end;
into.Add(currentWord);
end;
Result:=into;
end; |
Pour la compilation, pas de problème. MAis dans l'execution, il me donne l'erreur: .... 'Access Violation at 004B...'.
Et il pointe sur into.clear. Quand je mets celui-ci en commentaire, c'est toujours la même erreur sur cette fois-ci: into.Add(currentWOrd).
Je sais pas vraiment ce qui ne va pas.:roll:
Merci à tous de votre aide!;)