studio reales proyectos programacion libro introducción incluye herramientas fundamentos fuente español código con avanzado aplicaciones string vb6 trim

string - reales - Recortar todos los tipos de espacios en blanco, incluidas las pestañas



libro de android studio en español pdf (6)

En VB6, la función Trim () recorta espacios de la parte frontal y posterior de una cadena. Me pregunto si hay una función que recorte no solo los espacios, sino también todos los espacios en blanco (pestañas en este caso) fuera de cada extremo de una cadena.


Es una pena que no haya una función incorporada. Aquí está el que escribí. Lo hace el truco.

Function TrimAllWhitespace(ByVal str As String) str = Trim(str) Do Until Not Left(str, 1) = Chr(9) str = Trim(Mid(str, 2, Len(str) - 1)) Loop Do Until Not Right(str, 1) = Chr(9) str = Trim(Left(str, Len(str) - 1)) Loop TrimAllWhitespace = str End Function


Qué tal si:

Private Declare Function lstrlen Lib "kernel32" Alias "lstrlenW" ( _ ByVal lpString As Long) As Long Private Declare Function StrTrim Lib "shlwapi" Alias "StrTrimW" ( _ ByVal pszSource As Long, _ ByVal pszTrimChars As Long) As Long Private Function TrimWS(ByVal Text As String) As String ''Unicode-safe. Const WHITE_SPACE As String = " " & vbTab & vbCr & vbLf If StrTrim(StrPtr(Text), StrPtr(WHITE_SPACE)) Then TrimWS = Left$(Text, lstrlen(StrPtr(Text))) Else TrimWS = Text End If End Function

Es rápido, y aún más rápido si usa typelibs en lugar de Declare para definir las llamadas API.


Deberá combinar la función Trim con la función Replace :

s = " ABC " & vbTab & " " MsgBox Len(s) MsgBox Len(Trim$(s)) s = Replace$(Trim$(s), vbTab, "") MsgBox Len(s)

Nota: El código anterior también eliminará las pestañas incrustadas. Probablemente pueda resolver esto con expresiones regulares, pero esta es una forma de recortar espacios / pestañas solo desde los extremos mediante bucle:

Dim s As String, char As String, trimmedString As String Dim x As Integer s = " " & vbTab & " ABC " & vbTab & "a " & vbTab ''// Trim all spaces/tabs from the beginning For x = 1 To Len(s) char = Mid$(s, x, 1) If char = vbTab Or char = " " Then Else trimmedString = Mid$(s, x) Exit For End If Next ''// Now do it from the end For x = Len(trimmedString) To 1 Step -1 char = Mid$(trimmedString, x, 1) If char = vbTab Or char = " " Then Else trimmedString = Left$(trimmedString, x) Exit For End If Next

Deberías terminar con ABC{space}{space}{tab}a


Esto también podría ser útil, una continuación de @MathewHagemann Elimina líneas de vacío antes y después

Public Function TrimAllWhitespace(ByVal str As String) str = Trim(str) Do Until Not Left(str, 1) = Chr(9) str = Trim(Mid(str, 2, Len(str) - 1)) Loop Do Until Not Right(str, 1) = Chr(9) str = Trim(Left(str, Len(str) - 1)) Loop Do Until Not Left(str, 1) = Chr(13) str = Trim(Mid(str, 2, Len(str) - 1)) Loop Do Until Not Left(str, 1) = Chr(10) str = Trim(Mid(str, 2, Len(str) - 1)) Loop Do Until Not Right(str, 1) = Chr(10) str = Trim(Left(str, Len(str) - 1)) Loop Do Until Not Right(str, 1) = Chr(13) str = Trim(Left(str, Len(str) - 1)) Loop TrimAllWhitespace = str End Function


Aquí hay algo que se me ocurrió que le permite elegir entre devolver la cuerda recortada en sí o la longitud de la cuerda recortada

en un módulo

''========================================================= ''this function lets get either the len of a string with spaces and tabs trimmed of ''or get the string itself with the spaces and tabs trimmed off ''========================================================= Public Property Get eLen(sStr As String, Optional bTrimTabs As Boolean = True, Optional bReturnLen As Boolean = True) As Variant ''function which trims away spaces and tabs (if [bTrimTabs] is set to True) Dim s As String: s = sfuncTrimEnds(sStr, bTrimTabs) If bReturnLen Then '' if [bReturnLen] = True then return the trimmed string len eLen = Len(s) Else '' if [bReturnLen] = False then return the trimmed string eLen = s End If End Property ''=============================================================== '' this function trims spaces from both sides of string and tabs if [bTrimTabs] = true '' the return value is the string with the spaces (and tabs) trimmed off both sides ''=============================================================== Private Function sfuncTrimEnds(ByVal sStr As String, Optional bTrimTabs As Boolean = True) As String Dim lStart As Long, lEnd As Long Dim sChr As String Dim llen As Long: llen = Len(sStr) Dim l As Long: For l = 1 To llen sChr = Mid$(sStr, l, 1) If sChr <> " " And sChr <> vbTab Then lStart = l Exit For End If Next l For l = llen To 1 Step -1 sChr = Mid$(sStr, l, 1) If sChr <> " " And sChr <> vbTab Then lEnd = l Exit For End If Next l sStr = Mid$(sStr, lStart, (lEnd - (lStart - 1))) sfuncTrimEnds = sStr End Function

Para usar esto:

Dim s As String: s = " " & vbTab & " " & "mary wants my little lamb " & " " & vbTab & " " MsgBox Tru.eLen(s, , False) ''will return the trimmed text MsgBox Tru.eLen(s) '' will return the len of the trimmed text

O

Dim sVal As String: sVal = Tru.eLen(s, , False) if len(sval) > 0 then '' yada yada


Para vb.net (muy similar) para eliminar todos los espacios en blanco y controlar los caracteres del frente:

Public Function TrimWspFromFront(ByRef MyStr As String) As String While MyStr.Length > 0 AndAlso Left(MyStr, 1) < " " MyStr = Trim(Right(MyStr, MyStr.Length - 1)) End While Return MyStr End Function

Para quitar de la parte trasera:

Public Function TrimWspFromEnd(ByRef MyStr As String) As String While MyStr.Length > 0 AndAlso Right(MyStr, 1) < " " MyStr = Trim(Left(MyStr, MyStr.Length - 1)) End While Return MyStr End Function

NÓTESE BIEN. Pasó como ByRef para evitar la sobrecarga de hacer una copia, otros pueden preferir codificar como Sub o pasar ByVal