finipe
Messages postés57Date d'inscriptionjeudi 12 octobre 2000StatutMembreDernière intervention22 mars 2004
-
29 déc. 2002 à 12:01
cs_Delphiprog
Messages postés4297Date d'inscriptionsamedi 19 janvier 2002StatutMembreDerniè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)
cs_Delphiprog
Messages postés4297Date d'inscriptionsamedi 19 janvier 2002StatutMembreDernière intervention 9 janvier 201332 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à !