Aide: Convertir [Résolu]

yosthegost 26 Messages postés vendredi 3 novembre 2000Date d'inscription 17 mai 2006 Dernière intervention - 21 mars 2006 à 12:24 - Dernière réponse : cs_shining 329 Messages postés lundi 30 décembre 2002Date d'inscription 10 mars 2012 Dernière intervention
- 22 mars 2006 à 23:02
Bonjour





Je voudrai Convertir une variable de type string:


exemple





Bonjour en Bonjour.
Afficher la suite 

Votre réponse

12 réponses

Meilleure réponse
Cirec 4224 Messages postés vendredi 23 juillet 2004Date d'inscription 5 juin 2018 Dernière intervention - 21 mars 2006 à 13:17
3
Merci
Salut,
pour ton problème il faut retirer le caratère " & " de ton string pour cela tu as la fonction StringReplace de l'unité SysUtils:

function StringReplace(const S, OldPattern, NewPattern: string; Flags: TReplaceFlags): string;

rfReplaceAll : Remplace tous les caractères où chaine "OldPattern" par "NewPattern" dan "S" si rfReplaceAll n'est pas spécifié c'est le premier caractère rencontré qui serat modifié.
rfIgnoreCase : Ne tiend pas compte de la case (Majuscule Minuscule)

Mon_String := '&Bonjour';

Mon_Nouveau_String := StringReplace(Mon_String , '&', EmptyStr, [rfReplaceAll, rfIgnoreCase]);
Mon_Nouveau_String := 'Bonjour'

En Bleu le texte à modifier.
En Rouge le caractère qui doit être remplacé (peut aussi être une chaine de caractères)
En Violet le caractère où chaine de remplacement EmptyStr renvoie une chaine vide ce qui est égale à ''
En Vert le résultat modifié

Mon_String := 'DelphiFr c''est cool';
Mon_Nouveau_String := StringReplace(Mon_String , 'CoOl', 'genial', [ rfIgnoreCase]);
Mon_Nouveau_String := 'DelphiFr c''est genial'

Mon_String := 'DelphiFr_c''est_cool';
Mon_Nouveau_String := StringReplace(Mon_String , '_', ' ', [rfReplaceAll ]);
Mon_Nouveau_String := 'DelphiFr c''est cool'

Mon_String := 'DelphiFr_c''est_cool';
Mon_Nouveau_String := StringReplace(Mon_String , '_', ' ', []);
Mon_Nouveau_String := 'DelphiFr c''est_cool'

Voilà c'est tout bonne prog.

@+
Cirec
<HR>
N'oubliez pas de cliquer sur Réponses Acceptée si elle vous convient

Merci Cirec 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 117 internautes ce mois-ci

Commenter la réponse de Cirec
Meilleure réponse
sisi231 210 Messages postés mercredi 5 mars 2003Date d'inscription 29 mars 2013 Dernière intervention - 21 mars 2006 à 13:37
3
Merci
Cirec c'est rien et que pense-tu de la fonction AnsiReplaceStr ou AnsiReplaceText de StrUtils aussi ?

Enfin, j'y ai repensé et me suis dit qu'une fonction parfaite prendrait en compte les & échappés (&&) mais j'ai la flemme d'y réfléchir et elle ne sera utile que pour des cas bien particuliers...


SISI231

Merci sisi231 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 117 internautes ce mois-ci

Commenter la réponse de sisi231
Meilleure réponse
Cirec 4224 Messages postés vendredi 23 juillet 2004Date d'inscription 5 juin 2018 Dernière intervention - 21 mars 2006 à 13:59
3
Merci
Ces deux fonctions utilisent StringReplace.
Elles permettent une utilisation plus simple de StringReplace (pas de paramètres Flags à fournir) mais moins de possibilitées (voir mon poste)

function AnsiReplaceText(const AText, AFromText, AToText: string): string;
begin
Result := StringReplace(AText, AFromText, AToText, [rfReplaceAll, rfIgnoreCase]);
end ;

function AnsiReplaceStr(const AText, AFromText, AToText: string): string;
begin
Result : = StringReplace(AText, AFromText, AToText, [rfReplaceAll]);
end;

et il en existe deux autres :
ReplaceText et ReplaceStr mais elles font appel respectivement à AnsiReplaceText et AnsiReplaceStr
Voilà on tourne toujours autour de StringReplace alors autant la connaitre pour pouvoir l'utiliser pleinnement (enfin c'est mon avis)

@+
Cirec

Merci Cirec 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 117 internautes ce mois-ci

Commenter la réponse de Cirec
yosthegost 26 Messages postés vendredi 3 novembre 2000Date d'inscription 17 mai 2006 Dernière intervention - 21 mars 2006 à 12:25
0
Merci
Bonjour


Je voudrai Convertir une variable de type string:
exemple


B</gras>
Commenter la réponse de yosthegost
sisi231 210 Messages postés mercredi 5 mars 2003Date d'inscription 29 mars 2013 Dernière intervention - 21 mars 2006 à 12:44
0
Merci
Je pense que tu veux parler des captions des tmenuitem qui ont un de leur caractère souligné.

Si ton bonjour s'affiche ainsi : bonjour c'est ue sa véritable valeur est &bonjour. Il suffit donc de supprimer ce caractère &.

Tu peux par ex utiliser ma fonction ad hoc :

function nettoie_menuitem(s:string):string;

//enlève les caractères & des captions des menuitem

var ss:string;

begin

ss:=s;
delete(ss,pos('&',ss),1);
result:=ss;

end;

Cordialement.

SISI231
Commenter la réponse de sisi231
Cirec 4224 Messages postés vendredi 23 juillet 2004Date d'inscription 5 juin 2018 Dernière intervention - 21 mars 2006 à 13:21
0
Merci
salut,
désolé Sisi231 encore une fois j'ai pas rafraichi la page avant de poster

@+
Cirec
Commenter la réponse de Cirec
yosthegost 26 Messages postés vendredi 3 novembre 2000Date d'inscription 17 mai 2006 Dernière intervention - 21 mars 2006 à 14:54
0
Merci
Grand Merci a tous pour votre aide
Commenter la réponse de yosthegost
f0xi 4304 Messages postés samedi 16 octobre 2004Date d'inscription 9 mars 2018 Dernière intervention - 21 mars 2006 à 23:37
0
Merci
Attention, attention, StringReplace est une fonction trés lente.

voici deux methodes pour enlever un caractere en debut de chaine, l'une se base sur stringreplace et l'autre sur une inversion de chaine :

function UnLinkizeRVS(const S : string; const C : char) : string;
begin
result := ReverseString(S);
while result[Length(result)] = C do
SetLength(result,Length(Result)-1);
result := ReverseString(result);
end;

function UnLinkizeSRP(const S : string; const C : char) : string;
begin
result :=StringReplace(S,C,'',[rfReplaceAll]);
end;

UnLinkizeRVS, ~78ms pour 100KR (millier de requettes)
UnLinkizeSRP, ~250ms pour 100KR.

je te conseil d'utiliser la methode d'inversion de chaine qui est plus rapide.

<hr size="2" width="100%">
Commenter la réponse de f0xi
sisi231 210 Messages postés mercredi 5 mars 2003Date d'inscription 29 mars 2013 Dernière intervention - 22 mars 2006 à 00:05
0
Merci
Oui fOxi mais le & n'est pas toujours en début de chaine !...

A la limite ma fonction de départ semble un bon compromis...

SISI231
Commenter la réponse de sisi231
Cirec 4224 Messages postés vendredi 23 juillet 2004Date d'inscription 5 juin 2018 Dernière intervention - 22 mars 2006 à 00:53
0
Merci
Ne vous prenez pas la tête pour des millisecondes surtout qu'il n'y a pas 100 000 entrés dans un menu
s'il y en a 100 à faire c'est déjà beaucoup et là le temps, ben pardon, mais personne ne remarquera la différence.

En suite sur des gros traitement la oui ça devient intéressant de faire attention à ce genre de détails pour aller au plus vite mais bien souvent le nombre de traitement reste inférieur au millier et la, à moins d'avoir créer une fonction qui bouffe de la mémoire à chaque passage, la différence de performance n'est pas perceptible lors de l’exécution.





Et pour finir Maître F0xi en a tellement pondu qu’il en a oublié une fonction qu’il avait écrite et qui était pas mal en performance et en plus elle change tous les caractères.


-----
// Function de F0xi pour changer tous les caractères dans un String
function SuppChar(const S : string; const C : char) : string;
var pS, pR : PChar;
begin
Result := '';
SetLength(Result, length(S));
pS := PChar(S);
pR := PChar(Result);
While pS^ <> #0 do begin
if pS[0] <> C then begin
pR[0] : = pS[0];
Inc(pR);
end;
Inc(pS);
end;
end;

500000 requettes sur une chaine de 60 caracteres :
ma fonction : 1219ms (1.2 secondes)
StringReplace : 5328ms (5.3 secondes)

50000 requettes sur une chaine de 255 caracteres :
ma fonction : 1641ms (1.6 secondes)
StringReplace : 22578ms (22.6 secondes)

La suite est ici :
----

@+
Cirec
Commenter la réponse de Cirec
f0xi 4304 Messages postés samedi 16 octobre 2004Date d'inscription 9 mars 2018 Dernière intervention - 22 mars 2006 à 03:51
0
Merci
Oui en effet, j'avais completement oublier ... j'en profite donc pour la mettre dans un .pas sur mon delphi...

au passage, remerciez Florenth sans qui je n'aurais pus ecrire ce genre de fonction dont les performance sont sacrement élevée.

a 1640ms / 500KR, pour du string[255] ça nous donne 0.003ms pas requette.

en meme temps, StringReplace peu remplacer des sous-chaine complete alors que SuppChar ne supprime que des caracteres... ce qui est moins lourd.

bizarrement, il n'existe pas en natif dans delphi une fonction ne supprimer que 1 caractere dans toute la chaine.
et pourtant ... cela pourrait etre utile.
et meme si on réecris la fonction comme ceci :

function CharReplace(const S : string; const Old,New : char) : string;
var pS, pR : PChar;
begin
Result := '';
SetLength(Result, length(S));
pS := PChar(S);
pR := PChar(Result);
While pS^ <> #0 do begin
if pS[0] <> Old then begin
pR[0] := pS[0];
Inc(pR);
end else
if New <> #0 then begin
pR[0] := New;
Inc(pR);
end;
Inc(pS);
end;
end;

on obtient une fonction dans le style StringReplace mais specialisée pour les Caractere et non les sous-chaines.

et pour supprimer les & on ecrirait :

Caption := CharReplace(Caption,'&',#0);

<hr size="2" width="100%">
Commenter la réponse de f0xi
cs_shining 329 Messages postés lundi 30 décembre 2002Date d'inscription 10 mars 2012 Dernière intervention - 22 mars 2006 à 23:02
0
Merci
on peut également cité CXPOS, CXPOS est 25 fois plus rapide que StringReplace et offre aussi d'autres routines otpimisés, le site est actuellement HS mais vous pouvez télécharger une copie sur http://www.torry.net/vcl/vcltools/text/CXPOS.ZIP
Commenter la réponse de cs_shining

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.