Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
minirop
Messages : 321 Inscription : mer. 02/août/2006 21:06
Message
par minirop » sam. 12/mai/2007 19:24
bonjour,
j'aimerais savoir s'il existait une fonction comme replaceString mais qui fait un seul remplacement ? parce que dans mon interprète, les expressions sont parser comme des chaines donc j'utilises remplaceStrin mais comme replaceString remplace TOUTES les occurences, çà merde.
exemple :
Code : Tout sélectionner
5*5/10*2 => 25/10*2 => 2.5*2 => 5 ; OK!
5*5/5*5 => 25/25 => 1 ; pas OK !
voilà si quelqu'un à une astuce
merci
++
Dr. Dri
Messages : 2527 Inscription : ven. 23/janv./2004 18:10
Message
par Dr. Dri » sam. 12/mai/2007 19:37
c'est peut-être plus compliqué à mettre en oeuvre mais tu peux te faire une fonction qui ferait en gros ceci :
-trouver la première occurence de la chaine à remplacer
-récupérer ce qu'il y a avant
-récupérer ce qu'il y a après
-retourner "avant" + remplacement + "après"
Dri
minirop
Messages : 321 Inscription : mer. 02/août/2006 21:06
Message
par minirop » sam. 12/mai/2007 19:40
pas bête j'y avait pas pensé :s
merci
Dr. Dri
Messages : 2527 Inscription : ven. 23/janv./2004 18:10
Message
par Dr. Dri » sam. 12/mai/2007 19:46
allez je suis gentil voila un code tout fait
Code : Tout sélectionner
Procedure$ ReplaceFirst(String$, StringToFind$, StringToReplace$)
Index = FindString(String$, StringToFind$, 1)
Length = Len(String$) - Len(StringToFind$) - Index
If Index
String$ = Left(String$, Index-1) + StringToReplace$ + Right(String$, Length+1)
EndIf
ProcedureReturn String$
EndProcedure
Debug ReplaceFirst("5*5/5*5", "5*5", "25")
Dri
minirop
Messages : 321 Inscription : mer. 02/août/2006 21:06
Message
par minirop » sam. 12/mai/2007 19:52
je l'ai fais dans mon coin (j'aime pas les codes tout prêts), voici ce que çà donne :
Code : Tout sélectionner
Procedure.s myReplaceString(string.s,match.s,rempl.s)
pos.l = FindString(string,match,1)
endpos.l = pos + Len(match)
first.s = Left(string,pos-1)
second.s = Right(string,Len(string)-endpos+1)
ProcedureReturn first + rempl + second
EndProcedure
Gratteur
Messages : 147 Inscription : ven. 22/avr./2005 23:02
Message
par Gratteur » sam. 12/mai/2007 19:55
J'ai ça qui traine d'un vieux programme :
Code : Tout sélectionner
Procedure.s ReplaceFirstString(Chaine.s, ChaineCherchee.s, ChaineRemplacee.s, Position=1)
Protected p = FindString(Chaine, ChaineCherchee, Position)-1
If p >= 0
ProcedureReturn Left(Chaine, p)+ChaineRemplacee+Right(Chaine, Len(Chaine)-Len(ChaineCherchee)-p)
EndIf
ProcedureReturn Chaine.s
EndProcedure
txt.s = "Salut gaga, ça va ?"
Debug txt
Debug ReplaceString(txt, "ga", "gi")
Debug ReplaceFirstString(txt, "ga", "gi")
Flype
Messages : 2431 Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes
Message
par Flype » mar. 15/mai/2007 21:41
dans un tout autre genre - histoire de changer des Left(), Right(), Len()...
Code : Tout sélectionner
Procedure.s Replace(String.s, StringToFind.s, StringToReplace.s)
Protected *a.Character = @String, *b.Character = @StringToFind
While *a\c
While *a\c = *b\c
*a + SizeOf(Character)
*b + SizeOf(Character)
If Not *b\c
ProcedureReturn PeekS(@String, i) + StringToReplace + PeekS(*a)
EndIf
Wend
*a + SizeOf(Character)
i + 1
Wend
ProcedureReturn String
EndProcedure
brossden
Messages : 833 Inscription : lun. 26/janv./2004 14:37
Message
par brossden » mer. 16/mai/2007 6:53
Bonjour Flype tu pourrais expliquer un peu ?
Denis
Bonne Jounée à tous
brossden
Messages : 833 Inscription : lun. 26/janv./2004 14:37
Message
par brossden » mer. 16/mai/2007 7:10
Ok j'ai pigé en fin de compte mais c'est aimer se compliquer la vie quand même ! lol
Denis
Bonne Jounée à tous
Flype
Messages : 2431 Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes
Message
par Flype » mer. 16/mai/2007 8:15
oui mais c'est un poil plus rapide
car il n'y a pas de fonction puurebasic sur les chaines (left, right, len, ...) dans l'algo.