Remplacer chaine de caractère [Résolu]

Messages postés
269
Date d'inscription
samedi 13 décembre 2003
Dernière intervention
22 novembre 2010
- 21 avril 2006 à 00:40 - Dernière réponse :
Messages postés
692
Date d'inscription
jeudi 17 avril 2008
Dernière intervention
14 septembre 2018
- 4 déc. 2017 à 07:41
Bonjour à tous,

Voilà je souhaiterais juste pouvoir supprimer plusieurs caractères à la suite.

Je vais chercher dans la base de registre une certaine adresse, par exemple, une clé qui va contenir ceci :

C:\Documents and Settings\All Users\Bureau, et j'aimerais pouvoir enlever le "\Bureau".

Je suis avec cette ligne de code :

for i:=1 to Length(St) do
if St[i]='\Bureau' then Delete(St,i,1);

Mais malheureusement je n'arrive pas à m'en servir correctement...
En effet j'ai beaucoup de mal avec ce genre de chaine...

Donc comment lui faire comprendre que je ne voudrais pas supprimer UN caractère mais plusieurs ?
Afficher la suite 

Votre réponse

8 réponses

Meilleure réponse
Messages postés
1651
Date d'inscription
samedi 10 juillet 2004
Dernière intervention
25 juillet 2014
- 21 avril 2006 à 07:31
3
Merci
salut,

une chose avec:

for i:=1 to Length(St) do

if St[i]='\Bureau' then Delete(St,i,1);

tu auras une superbe erreur de compilation : Type incompatible

en effet tu compares un types char (St[i]) avec un string ('\Bureau')

Pour tester si la chaine St contient la chaine bureau il faut utiliser
la fonction Pos() qui renvoie la position de la sous chaine dans la
chaine et 0 si elle n'y ait pas-->

if pos('\Bureau',St)<>0 then delete(st,pos('\Bureau',st),length('\Bureau'));



@+

jlen

Merci jlen100 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 90 internautes ce mois-ci

Commenter la réponse de jlen100
Meilleure réponse
Messages postés
4304
Date d'inscription
samedi 16 octobre 2004
Dernière intervention
9 mars 2018
- 21 avril 2006 à 16:53
3
Merci
function DeleteString(const S : String; const RemoveString : string) : string;
var
PResult : PChar;
PValue : PChar;
i,c,L : integer;
begin
result := '';
SetLength(result,length(S));

PResult := PChar(result);
PValue := PChar(S);

// on recherche la premiere occurence
i := posex(RemoveString,S,1);
// on place notre compteur a 1
c := 1;
// on calcul la longeur de la chaine a supprimer -1
L := Length(RemoveString)-1;

// si aucune occurence de RemoveString n'est pas trouvée
if i = 0 then begin
// on renvois la chaine S
result := s;
// on sort de la methode
exit;
end;

// tant qu'on est pas au bout de la chaine S
while PValue^ <> #0 do begin
// si la position dans la chaine est differente de la position de l'occurence
// de la chaine a enlever ou que la chaine RemoveString n'est pas trouvée
if (not InRange(c,i,i+L)) or (i = 0) then begin
// on copie les caracteres de S vers Result
PResult[0] := PValue[0];
// on incremente PResult
inc(PResult);
end;

// on incremenete PValue
inc(PValue);
// idem pour C
inc(C);

// si on a depassé l'interval de la derniere occurence de RemoveString
if C > (i+L) then
// on recherche une nouvelle occurence
i := posex(RemoveString,S,i+L);
end;
// enfin, on termine la chaine AZT du resultat
PResult[0] := #0;
end;

voila, pour ceux qui trouverais que cette methode contient beaucoup de code, je vous conseil de lire la suite :

StringReplace est bien mais elle est longue a executée.

Copy, Delete, requiere du code suplementaire et ne sont pas vraiment adapté car de trop nombreux appel finiront par rendre la methode longue a executée.

sur ma methode, on peu supprimer trés vite de longue chaine dans un texte trés gros.
avec un petit bench on obtient :

pour virer ABC d'une chaine de 250 Octets (contenant une repetition de "ABCABCABC-")

10 000 appels a cette methode 63..94ms

ce qui je pense est trés trés raisonnable car le meme test avec StringReplace donne

10 000 appels a StringReplace 1297..1330ms

soit plus de 1200 ms par rapport a ma methode ...

make your choice.

Merci f0xi 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 90 internautes ce mois-ci

Commenter la réponse de f0xi
- 21 avril 2006 à 01:02
0
Merci
Salut,



Tu souhaites vider un répertoire de ses fichiers puis détruire ce dernier si j'ai compris ??
Commenter la réponse de Utilisateur anonyme
Messages postés
1799
Date d'inscription
vendredi 27 décembre 2002
Dernière intervention
19 juillet 2018
- 21 avril 2006 à 08:22
0
Merci
Pourquoi pas :



function DeleteBureau(St: String): String;

begin

Result := StringReplace(St, '\Bureau', '', [rfIgnoreCase]);

end;





Bonne prog'
Commenter la réponse de japee
Messages postés
329
Date d'inscription
lundi 30 décembre 2002
Dernière intervention
10 mars 2012
- 25 avril 2006 à 15:49
0
Merci
voici une alternative à StringReplace
http://www.droopyeyes.com/default.asp?mode=ShowProduct&ID=4

ya aussi cxpos library qui doit être faite en asm je crois
Commenter la réponse de cs_shining
0
Merci
bonsoir
comment je peux remplacer une sous chaines de caractère s2 dans s1 par une chaine de caractère par exp 'GAMMA'; merci d'avance
Messages postés
692
Date d'inscription
jeudi 17 avril 2008
Dernière intervention
14 septembre 2018
- 4 déc. 2017 à 07:41
tu utilise le Stringreplace de japy un peu plus haut
Result := StringReplace(St, s2, s1, [rfIgnoreCase]);
Commenter la réponse de cho

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.