MINI-FONCTION REPLACE POUR VB5

Scalpweb Messages postés 1467 Date d'inscription samedi 13 mars 2004 Statut Membre Dernière intervention 5 mai 2010 - 15 juil. 2004 à 13:39
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 - 16 juil. 2004 à 11:14
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/24559-mini-fonction-replace-pour-vb5

Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
16 juil. 2004 à 11:14
ok ok.

bonne continuation ;)
RedLupus Messages postés 5 Date d'inscription lundi 8 mars 2004 Statut Membre Dernière intervention 17 août 2004
16 juil. 2004 à 09:42
Merci à RENFIELD et SCALPWEB pour leurs commentaires constructifs.
Pourquoi j'utilise "Let" ? Je sais, c'est inutile. Une déformation, sans doute, car avant je pratiquais le "Pascal" où les instructions d'affectation sont bien différenciées. Pour "Let", c'est la même idée, un souci de lisibilité.
Par ailleurs, en Basic, je crois que je vais délaisser "Right$" au profit de "Mid$", quand même beaucoup plus souple : pas besoin de se "traîner" la longueur de la chaîne avec "Mid$". Pourquoi ai-je (avais-je) l'habitude d'utiliser "Right$" ? Même raison : lisibilité. Mais.. çà a un prix qui s'appelle... perte d'efficacité.
Dans tous les cas, MERCI pour les remarques qui me permettent de progresser, ce qui, sommes toutes, est essentiel (du moins pour moi).
Scalpweb Messages postés 1467 Date d'inscription samedi 13 mars 2004 Statut Membre Dernière intervention 5 mai 2010 4
15 juil. 2004 à 18:23
Oui, effectivement, tu devrais mettre rapidment ta source à jour.
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
15 juil. 2004 à 15:26
Salut ;)

j'ai testé ta fonction... elle comporte des bugs...


voici une version corrigée (et qui supporte l'argument Compare....)


Public Function ReplaceR(ByVal Expression As String, ByVal Find As String, ByVal Replace As String, Optional ByVal Start As Long 1, Optional ByVal Count As Long -1, Optional ByVal Compare As VbCompareMethod = vbTextCompare) As String
Dim P As Long: P = 1
Dim LFind As Long: LFind = Len(Find)
Dim LReplace As Long: LReplace = Len(Replace)

Select Case Start
Case Is <= 0
Err.Raise 5
Case Is > Len(Expression)
Exit Function
Case Else
Expression = Mid$(Expression, Start)
End Select

ReplaceR = Expression

If Find vbNullString Or Count 0 Then Exit Function
Do
Let P = InStr(P, Expression, Find, Compare)

If P > 0 Then
Expression = Left$(Expression, P - 1) & Replace & Mid$(Expression, P + LFind)

Count = Count - 1
P = P + LReplace
End If
Loop Until (P <0) Or (Count 0)

ReplaceR = Expression
End Function


Buggée ? oui, car tu recommence la recherche a partie du premier caractère a chaque fois....

replacet("ABBCC", "BC", "")
-> ACC au lieu de ABC

(au fait, pourquoi utilises tu 'Let' ?)
Scalpweb Messages postés 1467 Date d'inscription samedi 13 mars 2004 Statut Membre Dernière intervention 5 mai 2010 4
15 juil. 2004 à 13:39
Je confirme, cette fonction n'est pas intégré dans VB5 (tu moins dans MON VB5 et je doute qu'il soit différent des autres).
Je comptais développé une dll contennant toutes les fonctions en moins de VB5. Je sais qu'il y a Replace, et Splite. Si qqn en connait d'autre, je suis prenneur.

Sinon, bien ta source ! :-)
Rejoignez-nous