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
vba:functions:substrreplace [21.08.2014 16:43:47]
yaslaw
vba:functions:substrreplace [29.04.2015 11:08:08] (current)
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 ist analog zum PHP-Befehl substr_replace()+//Diese Funktion ist analog zum PHP-Befehl substr_replace()//
  
-{{:vba:​functions:​udf_substrreplace.bas|Download ​udf_substrreplace.bas}}+==Version %%version%% (%%vdate%%)== 
 +{{%%ns%%:%%fname%%|Download ​%%fname%% (V-%%version%%)}}
  
 ===== Beispiele ===== ===== Beispiele =====
-<code vb> +<code vb>'Nach dem 3ten Zeichen alles ersetzen 
-?​substrReplace("​AB CD EF", "XYZ",3) +?​substrReplace("​AB CD EF", "_uvw_", 3) 
-AB XYZ+AB _uvw_
  
-?​substrReplace("​AB CD EF", "XYZ",3, 0) +'Nach dem 3ten Zeichen einfügen 
-AB XYZCD EF+?​substrReplace("​AB CD EF", "_uvw_",3, 0) 
 +AB _uvw_CD ​EF
  
-?​substrReplace("​AB CD EF", "XYZ",3 ,3) +'ab dem 3ten Zeichen 3Zeichen ersetzen 
-AB XYZEF+?​substrReplace("​AB CD EF", "_uvw_",3 ,3) 
 +AB _uvw_EF
  
-?​substrReplace("​AB CD EF", "XYZ",-3, 1) +'Ab dem 3ten Zeichen von hinten ein Zeichen ersetzen 
-AB CDXYZEF+?​substrReplace("​AB CD EF", "_uvw_",-3, 1) 
 +AB CD_uvw_EF
  
-?​substrReplace("​AB CD EF", "XYZ", 3, -2) +'Ab dem 3ten Zeichen bis zum 2t letzten Zeichen ersetzen 
-AB XYZEF+?​substrReplace("​AB CD EF", "_uvw_", 3, -2) 
 +AB _uvw_EF
  
-?​substrReplace("​AB CD EF", "XYZ",​0,​0) +'Text am Anfang anfügen 
-XYZAB CD EF+?​substrReplace("​AB CD EF", "_uvw_",​0,​0) 
 +_uvw_AB ​CD EF
 </​code>​ </​code>​
  
-===== Code ===== +Und noch ein einfaches Beispiel, wie man diese Funktion für %%RegExp%%-Ersetzungen gut gebrauchen kann 
-<code vb udf_substrReplace.bas> +<code vb>Dim rx As New regExp: ​  rx.Pattern ​= "\d+": ​rx.Global = True 
-Attribute VB_Name ​= "udf_substrReplace" +Dim txt As String:      ​txt = "9 Hühner und 12 Schweine"​
-'​------------------------------------------------------------------------------- +
-'​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 +Dim mc As MatchCollection: ​ Set mc = rx.execute(txt) 
-'​iString +'von Hinten nach vorne iterierendamit die Startpunkte (firstIndex) ihre Gültigkeit behalten 
-'Die Eingabezeichenkette+Dim i As Integer: For i = mc.count - 1 To 0 Step -1 
-' +    Dim m As Match: Set m = mc.item(i
-'​iReplacement +    txt = substrReplace(txtm.value ^ 2m.firstIndex,​ m.length) 
-'Die Ersetzungszeichenkette +Next i 
-+Debug.Print txt
-'​iStart +
-'Ist start positivbeginnt ​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 positiv, stellt dieser Parameter die Länge des auszuwechselnden Teils von string darIst der Wert negativ, gibt 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ührtdas heißtdie 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.+
  
-'/** +'Ausgabe: 
-' ​* Ersetzt Text innerhalb einer Zeichenkette +'81 Hühner und 144 Schweine<​/code> 
-' * @param ​ String ​     Die Eingabezeichenkette +===== Code ===== 
-' * @param ​ String ​     Die Ersetzungszeichenkette +<​source ​'%%fpath%%/%%fname%%' ​vb>
-' * @param ​ Integer ​    ​Start +
-' * @param ​ Integer ​    ​Länge +
-' * @return String +
-' *+
-Public Function substrReplace(ByVal iString As String, ByVal iReplacement As String, ByVal iStart As Integer, Optional 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 +
- +
-'​------------------------------------------------------------------------------- +
-' -- Private Libraries +
-'​------------------------------------------------------------------------------- +
- +
-'/** +
-' * Copyright mpl by ERB software | http://​wiki.yaslaw.info +
-' * +
-' * 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(iItems)) +
-    Dim item As Variant: For Each item In iItems +
-        If Nz(item) > Nz(greatest) Then greatest ​item +
-    Next item +
-End Function +
- +
-'/** +
-' ​* Gibt den Kleinsten aus einer unbestimmten Menge von Werten zurück +
-' * @param ​ Keine Objekte +
-' * @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 +
-</code>+
vba/functions/substrreplace.1408632227.txt.gz · Last modified: 21.08.2014 16:43:47 by yaslaw