User Tools

Site Tools


vba:functions:substrreplace

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
Last revision Both sides next revision
vba:functions:substrreplace [21.08.2014 16:40:59]
yaslaw
vba:functions:substrreplace [07.10.2014 14:11:38]
yaslaw
Line 1: Line 1:
 +<​const>​
 +    version=1.0.0
 +    vdate=21.08.2014
 +    fname=udf_substrreplace.bas
 +    ns=%NAMESPACE% ​   ​
 +    fpath=/​vba/​functions
 +</​const>​
 ====== [VBA] substrReplace() ====== ====== [VBA] substrReplace() ======
-Diese Funktion st analog zum PHP-Befehl substr_replace()+''​Version %%version%% ​(%%vdate%%)''​
  
-{{:​vba:​functions:​udf_substrreplace.bas|Download udf_substrreplace.bas}}+Diese Funktion ist analog zum PHP-Befehl substr_replace()
  
-<code vb udf_substrReplace.bas>​ +{{%%ns%%:%%fname%%|Download %%fname%% ​(V-%%version%%)}}
-Attribute VB_Name = "​udf_substrReplace"​ +
-'​------------------------------------------------------------------------------- +
-'​File ​        udf_substrReplace.bas +
-' ​              ​Copyright mpl by ERB software +
-' ​              All rights reserved +
-' ​              ​http://​wiki.yaslaw.info/​dokuwiki/​doku.php/​vba/​functions/​substrReplace +
-'​Environment ​ : VBA 2010 + +
-'​Version ​     : 1.0.0 +
-'​Name ​        : substrReplace +
-'​Author ​      : Stefan Erb (ERS) +
-'​History ​     : 21.08.2014 - ERS - Creation +
-'​------------------------------------------------------------------------------- +
-Option Explicit+
  
-'​Analog zu substr_replace aus PHP +===== Beispiele ===== 
-'iString +<code vb>'Nach dem 3ten Zeichen alles ersetzen 
-'Die Eingabezeichenkette. +?​substrReplace("​AB CD EF""​_uvw_"​3
-+AB _uvw_
-'​iReplacement +
-'Die Ersetzungszeichenkette +
-+
-'​iStart +
-'Ist start positiv, beginnt die Ersetzung ab der im Offset-Parameter start definierten Stelle innerhalb von string . +
-'Ist start negativ, wird vom Ende der Zeichenkette string bis zum Wert von start rückwärts gezählt und dort mit dem Austausch begonnen. +
-+
-'​iLength +
-'Ist der Parameter angegeben und positivstellt dieser Parameter die Länge des auszuwechselnden Teils von string dar. Ist der Wert negativgibt er die Zeichenzahl an, um die ab Ende von +
-'​string rückwärts gezählt wird. Bis zu dieser Stelle erfolgt dann der Austausch. Ist der Parameter nicht angegeben, wird standardmäßig eine Ersetzung bis zum Ende des Strings (strlen(string )+
-'​durchgeführt,​ das heißt, die Ersetzung endet mit dem Ende von string . Sollte length den Wert null haben, wird die Funktion die Zeichenkette replacement in string an der durch start +
-'​bezeichneten Stelle einfügen.+
  
-'/** +'Nach dem 3ten Zeichen einfügen 
-' * Ersetzt Text innerhalb einer Zeichenkette +?substrReplace("AB CD EF""​_uvw_"​,3, 0) 
-' * @param ​ String ​     Die Eingabezeichenkette +AB _uvw_CD EF
-' * @param ​ String ​     Die Ersetzungszeichenkette +
-' * @param ​ Integer ​    ​Start +
-' * @param ​ Integer ​    ​Länge +
-' * @return String +
-' */ +
-Public Function ​substrReplace(ByVal iString As StringByVal iReplacement As StringByVal iStart As IntegerOptional ByVal iLength As Variant = Null) As String +
-    Dim startP As Integer: ​ startP = IIf(Sgn(iStart) >= 0, iStart, greatest(Len(iString+ iStart, 1)) +
-    Dim length As Integer: ​ length = Nz(iLength, Len(iString) - iStart) +
-    Dim endP   As Integer +
-     +
-    Select Case Sgn(length) +
-        Case 1:     endP = least(startP + length, Len(iString)) +
-        Case 0:     endP = startP +
-        Case -1:    endP = greatest(Len(iString) + length, startP) +
-    End Select +
-     +
-    substrReplace = Left(iString,​ startP) & iReplacement & Mid(iString,​ endP + 1) +
-    ​ +
-End Function+
  
-'------------------------------------------------------------------------------- +'ab dem 3ten Zeichen 3Zeichen ersetzen 
-' -- Private Libraries +?​substrReplace("​AB CD EF", "​_uvw_",​3 ,3) 
-'​-------------------------------------------------------------------------------+AB _uvw_EF
  
-'/** +'Ab dem 3ten Zeichen ​von hinten ein Zeichen ersetzen 
-' * Copyright mpl by ERB software | http://​wiki.yaslaw.info +?​substrReplace("AB CD EF", "_uvw_",-3, 1
-' * +AB CD_uvw_EF
-' * Gibt den Grössten aus einer unbestimmten Menge von Werten zurück +
-' * @param ​ Keine Objekte +
-' * @return Grösster Wert +
-' * @example greatest("Hallo Welt", 42, "Mister-X"-> Mister-X +
-'*/ +
-Private Function greatest(ParamArray iItems(As Variant) As Variant +
-    greatest = iItems(UBound(items)) +
-    Dim item As Variant: For Each item In iItems +
-        If Nz(item) > Nz(greatest) Then greatest = item +
-    Next item +
-End Function+
  
-'/** +'Ab dem 3ten Zeichen bis zum 2t letzten Zeichen ersetzen 
-' * Gibt den Kleinsten aus einer unbestimmten Menge von Werten zurück +?​substrReplace("AB CD EF", "_uvw_", 3, -2
-' * @param ​ Keine Objekte +AB _uvw_EF
-' * @return Grösster Wert +
-' * @example least("Hallo Welt", 42, "Mister-X"-> 42 +
-'*/ +
-Private Function least(ParamArray iItems(As Variant) As Variant +
-    least = iItems(LBound(iItems)) +
-    Dim item As Variant: For Each item In iItems +
-        If Nz(item) < Nz(least) Then least = item +
-    Next item +
-End Function+
  
 +'Text am Anfang anfügen
 +?​substrReplace("​AB CD EF", "​_uvw_",​0,​0)
 +_uvw_AB CD EF
 </​code>​ </​code>​
 +
 +Und noch ein einfaches Beispiel, wie man diese Funktion für %%RegExp%%-Ersetzungen gut gebrauchen kann
 +<code vb>Dim rx As New regExp: ​  ​rx.Pattern = "​\d+":​ rx.Global = True
 +Dim txt As String: ​     txt = "9 Hühner und 12 Schweine"​
 +
 +Dim mc As MatchCollection: ​ Set mc = rx.execute(txt)
 +'von Hinten nach vorne iterieren, damit die Startpunkte (firstIndex) ihre Gültigkeit behalten
 +Dim i As Integer: For i = mc.count - 1 To 0 Step -1
 +    Dim m As Match: Set m = mc.item(i)
 +    txt = substrReplace(txt,​ m.value ^ 2, m.firstIndex,​ m.length)
 +Next i
 +Debug.Print txt
 +
 +'​Ausgabe:​
 +'81 Hühner und 144 Schweine</​code>​
 +===== Code =====
 +<source '​%%fpath%%/​%%fname%%'​ vb>
vba/functions/substrreplace.txt · Last modified: 29.04.2015 11:08:08 by yaslaw