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:
Pour la compilation, pas de problème. MAis dans l'execution, il me donne l'erreur: .... 'Access Violation at 004B...'.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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;
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.
Merci à tous de votre aide!
Partager