User Tools

Site Tools


vba:functions:substrreplace

Differences

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

Link to this comparison view

Next revision
Previous revision
vba:functions:substrreplace [21.08.2014 16:40:00]
yaslaw created
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 ​st analog zum PHP-Befehl substr_replace()+//Diese Funktion ​ist analog zum PHP-Befehl substr_replace()//
  
-<code vb udf_substrReplace.bas>​ +==Version ​%%version%% ​(%%vdate%%)== 
-Attribute VB_Name ​"​udf_substrReplace"​ +{{%%ns%%:%%fname%%|Download %%fname%% (V-%%version%%)}}
-'​------------------------------------------------------------------------------- +
-'​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.1408632000.txt.gz · Last modified: 21.08.2014 16:40:00 by yaslaw