EDIT : J'ai modifié le titre puisque finalement, le problème vient d'un souci d'encodage et n'a rien à voir avec AnsiReplaceStr.
Bonjour,
J'ai un comportement totalement incompréhensible, ou quelque chose m'échappe complètement :
Si je fais :
Tout va bien, normal et le programme m'affiche : "blé blé blé"
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 var vc_paramstr : AnsiString; begin vc_paramstr := 'bla bla bla'; vc_paramstr := AnsiReplaceStr(vc_paramstr, 'a', 'é'); application.MessageBox(Pchar(vc_paramstr), '', 0); end;
Si je fais :
Dans ce cas, ma chaine vc_paramstr semble vide et le message qui s'affiche est vide.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 var vc_paramstr : AnsiString; function CharSpe(var pi_str: Ansistring) : boolean; begin pi_str := strutils.AnsiReplaceStr(pi_str, 'a', 'é'); result := true; end; begin vc_paramstr := 'bla bla bla'; CharSpe(vc_paramstr); application.MessageBox(Pchar(vc_paramstr), '', 0); end;
Même problème si je tente de remplacer le "a" de "bla bla bla" par n'importe quel caractère accentué.
Enfin, si je remplace par un autre caractère qu'un caractère accentué, plus de souci:
m'affiche le message "ble ble ble"
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 var vc_paramstr : AnsiString; function CharSpe(var pi_str: Ansistring) : boolean; begin pi_str := strutils.AnsiReplaceStr(pi_str, 'a', 'e'); result := true; end; begin vc_paramstr := 'bla bla bla'; CharSpe(vc_paramstr); application.MessageBox(Pchar(vc_paramstr), '', 0); end;
Tout se passe comme si le passage par la fonction plaçait un caractère de fin de chaîne au début de ma variable, si bien que le Pchar(vc_paramstr) est effectivement une chaine vide.
A noter : J'ai aussi essayé ceci :
Même résultat.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 var vc_paramstr : AnsiString; function CharSpe(const pi_str: Ansistring) : AnsiString; begin result := strutils.AnsiReplaceStr(pi_str, 'a', 'é'); end; begin vc_paramstr := 'bla bla bla'; vc_paramstr := CharSpe(vc_paramstr); application.MessageBox(Pchar(vc_paramstr), '', 0); end;
Plateforme de dev : Mac OS X.
Je dois passer à côté de quelque chose de si énorme que je ne le vois pas. Help ....
Merci d'avance
Partager