Remplacement auto de caractères

finipe Messages postés 57 Date d'inscription jeudi 12 octobre 2000 Statut Membre Dernière intervention 22 mars 2004 - 29 déc. 2002 à 12:01
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 - 29 déc. 2002 à 14:53
Bonjour à tous.

Il y a qques temps de ça, j'avais demandé un coup de pouce pour le problème suivant : remplacer automatiquement un caractère par un autre pendant la saisie d'une chaîne. On m'avait donné la fonction suivante, qui marche impeccable (c'est magique ! :approve) ) :

function Replace(sData: String; sSubstring: String; sNewsubstring: string): String;
var pos1:integer;
s2,res:string;
begin
s2:=sData;
pos1:=pos(sSubstring,s2);
res:='';
while (pos1<>0) do
begin
res:=res+copy(s2,1,pos1-1)+sNewsubstring;
s2:=copy(s2,pos1+length(sSubstring),length(s2)+1-(pos1+length(sSubstring))); //le fait sauf au dernier passage
pos1:=pos(sSubstring,s2);
end;
res:=res+s2;
Result:=res;
end;

Ensuite il suffit donc de placer une ligne du type...

name.Text := Replace(name.Text,' ','.');

... pendant un événement de type OnKeyPress pour remplacer automatiquement les espaces par des points.

Tout fonctionne très bien, sauf que maintenant je voudrais justement que le dernier caractère soit pris en compte, ce qui n'est pas le cas de cette fonction. J'ai beau essayer de trouver la combine, je capte pas bien la fonction déjà, donc je suis mal barré pour y arriver tout seul.

Un autre coup de pouce des programmateurs surdoués ?

Merci à vous et à +

-----------------------------------------------
"La liberté, c'est de pouvoir dire merde à tout le monde." (R. Dorgelès)

1 réponse

cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
29 déc. 2002 à 14:53
Il me semble aussi avoir proposé ceci :
"StringReplace renvoie une chaîne dans laquelle les occurrences d'une sous-chaîne sont remplacées par une autre sous-chaîne.

Unité : SysUtils

Catégorie : routines de gestion des chaînes

type
TReplaceFlags = set of (rfReplaceAll, rfIgnoreCase);
function StringReplace(const S, OldPattern, NewPattern: string; Flags: TReplaceFlags): string;

Description

StringReplace remplace dans une chaîne les occurrences d'une sous-chaîne, OldPattern, par une autre sous-chaîne, NewPattern. StringReplace considère que la chaîne peut contenir des caractères multi-octets.

Si le paramètre Flags n'inclut pas rfReplaceAll, StringReplace ne remplace que la première occurrence de OldPattern dans la chaîne S. Si le paramètre Flags inclut rfIgnoreCase, la comparaison ne tient pas compte de la casse."

Cà ne fonctionne pas ?
Comme l'unité SysUtils est incluse avec chaque fiche, ça ne consomme pas de mémoire que d'utiliser ce qui existe déjà !

May Delphi be with you
0
Rejoignez-nous