Alternative à la function vba ou vb replace (jusqu'à 10 fois plus vite, sans api)

Soyez le premier à donner votre avis sur cette source.

Vue 6 313 fois - Téléchargée 553 fois

Description

J'ai trouvé cette fonction dans le forum Bigsource. Comme je n'ai pas trouvé d'équivalent si rapide sur VBFrance, j'ai du alors fabriquer cette feuille pour le test que s'assevère positif.

Source / Exemple :


C'est mieux faire le test aussi

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

cs_Norpac
Messages postés
12
Date d'inscription
jeudi 27 décembre 2007
Statut
Membre
Dernière intervention
21 janvier 2013

L'instruction :
ReDim Preserve alHits(0 To lSize) As Long
prend environ 40 % du temps d'exécution. Pourquoi ne pas calculer la taille de ce tableau au préalable et n'effectuer le dimensionnement qu'une seule fois. Cela oblige à dupliquer quelques instructions mais s'avère payant. J'arrive à un rapport de 300 ms pour 16000 ms sur le même exemple.
Toujours impressionné par le travail de passionnés anonymes.
us_30
Messages postés
2065
Date d'inscription
lundi 11 avril 2005
Statut
Membre
Dernière intervention
14 mars 2016
8
Ouais, ben, si il y avait que ça... CompMode vaut quoi ? Le typage de Textin, SeachStr, Replacement sont variant... et pis, aucune optimisation... Toutes les options de Replace ne sont pas présente. Sans compter le genre de truc qui sert à rien : If IsNull(Replacement) Then Replacement = ""... Utiliser IsMissing, ou mieux une valeur par défaut nulle dans les paramètres... etc.

J'ai testé (enfin, si on peut dire) cette proposition, et, j'ai arrêté tout sauvagement VB6, faute de patience...

=

Sinon, le code de VICOSTA est optimisable déjà en utilisant les mêmes types d'optimisation que dans StrRapelace... Entre autre : utiliser LenB, InstrB...

Amicalement,
Us.
BruNews
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
18
Pointer As Long
cs_bernan
Messages postés
1
Date d'inscription
jeudi 31 décembre 2009
Statut
Membre
Dernière intervention
15 février 2010

Ou alors, il y a aussi :

Function ReplaceStr(TextIn, SearchStr, Replacement)
If IsNull(SearchStr) Or SearchStr = "" Then
ReplaceStr = TextIn
Exit Function
End If
On Error GoTo 0
If IsNull(Replacement) Then Replacement = ""
Dim WorkText As String, Pointer As Double
If IsNull(TextIn) Then
ReplaceStr = Null
Else
WorkText = TextIn
Pointer = InStr(1, WorkText, SearchStr)
Do While Pointer > 0
WorkText = left(WorkText, Pointer - 1) & Replacement & Mid(WorkText, Pointer + Len(SearchStr))
Pointer = InStr(Pointer + Len(Replacement), WorkText, SearchStr, CompMode)
Loop
ReplaceStr = WorkText
End If
End Function
vicosta
Messages postés
178
Date d'inscription
lundi 5 juin 2006
Statut
Membre
Dernière intervention
30 novembre 2011

@ Brunnews: très bien vu, je pense que sur C+ ça va encore plus vite, dommage que je suis presque trop vieux pour m'y mettre.

@ US_30: merci pour le lien, j'ai testé, StrReplace ça va deux fois plus vite que VBReplace, et 20 fois plus vite que la function standard Replace

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.