Remplacer chaine de caractère [Résolu]

Also know as 269 Messages postés samedi 13 décembre 2003Date d'inscription 22 novembre 2010 Dernière intervention - 21 avril 2006 à 00:40 - Dernière réponse : dubois77 670 Messages postés jeudi 17 avril 2008Date d'inscription 10 décembre 2017 Dernière intervention
- 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 
269Messages postés samedi 13 décembre 2003Date d'inscription 22 novembre 2010 Dernière intervention

8 réponses

Répondre au sujet
jlen100 1651 Messages postés samedi 10 juillet 2004Date d'inscription 25 juillet 2014 Dernière intervention - 21 avril 2006 à 07:31
+3
Utile
1
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
Commenter la réponse de jlen100
f0xi 4302 Messages postés samedi 16 octobre 2004Date d'inscription 20 mars 2017 Dernière intervention - 21 avril 2006 à 16:53
+3
Utile
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.
Commenter la réponse de f0xi
Utilisateur anonyme - 21 avril 2006 à 01:02
0
Utile
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
japee 1792 Messages postés vendredi 27 décembre 2002Date d'inscription 12 novembre 2016 Dernière intervention - 21 avril 2006 à 08:22
0
Utile
Pourquoi pas :



function DeleteBureau(St: String): String;

begin

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

end;





Bonne prog'
Commenter la réponse de japee
cs_shining 329 Messages postés lundi 30 décembre 2002Date d'inscription 10 mars 2012 Dernière intervention - 25 avril 2006 à 15:49
0
Utile
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
Utile
1
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
dubois77 670 Messages postés jeudi 17 avril 2008Date d'inscription 10 décembre 2017 Dernière intervention - 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.