2016-03-20 8 views
0

Ich schrieb eine Funktion, um eine Zeichenfolge zu empfangen und sie mit allen Leerzeichen zurückzuschreiben, außer Leerzeichen. Wenn Leerzeichen am Anfang oder Ende der Zeichenfolge oder nach oder vor einem anderen Leerzeichen stehen, werden sie ebenfalls gelöscht.Fehlertyp stimmt nicht mit Wagenrücklauf und Zeilenvorschub überein

Ex."_a_____a" wird "a_a". („_“ Steht für ein Leerzeichen)

ich die folgende Abfrage ausgeführt wurde:

UPDATE table1 
SET field1 = whitespace(field1) 

Aus irgendeinem Grund, wenn die Zeichenfolge beginnt mit einem Carriage Return oder Line Feed, erhalte ich einen Typenkonflikt Fehler .

Public Function whiteSpace(ByVal field As String) As String 
    Dim i As Integer 
    If (IsNull(field)) Then 
     field = "" 
     GoTo catchNulls 
    End If 
    field = RegexReplace(field, "(?=\s)[^ ]", " ") 
    field = Trim(field) 
    field = RegexReplace(field, " +", " ") 

catchNulls: 
    whiteSpace = field 
End Function 

Function RegexReplace(ByVal text As String, _ 
         ByVal replaceWhat As String, _ 
         ByVal replaceWith As String, _ 
         Optional ByVal ignoreCase As Boolean = False) As String 
    On Error GoTo catch 
    Dim RE As Object 
    Dim str As String 

    str = Empty 
    Set RE = CreateObject("vbscript.regexp") 
    RE.ignoreCase = ignoreCase 
    RE.pattern = replaceWhat 
    RE.Global = True 
    str = RE.Replace(text, replaceWith) 
continue: 
    RegexReplace = str 
    Exit Function 
catch: 
    Call raiseError(Err.Number, Err.Source, Err.Description) 
    GoTo continue 
End Function 

Ich versuchte Public Function whiteSpace(ByVal field As String) As String für Public Function whiteSpace(ByVal field As Variant) As String Austausch und ich habe nicht den Fehler, aber Felder mit Carriage Return und Line Feed gleich geblieben.

+0

Brechen Sie den Code: 1. den String-Wert von 'field1' erhalten, manipulieren 2. dass die String-Wert über die Funktion, 3. Schreiben Sie Ihre SQL-Update, indem Sie' field1' mit dem neuen Wert. – Ambie

Antwort

0

Ihre Regex ist falsch. Versuchen Sie es mit dieser Funktion zu normalisieren die Räume:

'' 
' Strips all the white-spaces from a string and replaces any sequence 
' of white-space characters by a single space. 
'' 
Function NormalizeSpace(text As String) As String 
    Static re As Object 
    If re Is Nothing Then 
    Set re = CreateObject("VBScript.RegExp") 
    re.Global = True 
    re.Pattern = "\s+" 
    End If 
    NormalizeSpace = VBA.Trim$(re.replace(text, " ")) 
End Function 
+0

Danke, aber ich muss führende und nachfolgende Leerzeichen löschen, ** whitespaces ** in string streichen, ** außer ein Leerzeichen **, ersetzen Sie die Folge von ** Leerzeichen ** innerhalb der Zeichenfolge mit einem Leerzeichen. – MJH

+0

Meine Beschreibung ist irreführend, die Funktion macht alles. Ich werde es aktualisieren. –

+0

Bitte erläutern Sie auch Ihren Code. Vielen Dank. – MJH

Verwandte Themen