ABOUT Visual Basic Programmieren Programmierung Download Downloads Tips & Tricks Tipps & Tricks Know-How Praxis VB VBA Visual Basic for Applications VBS VBScript Scripting Windows ActiveX COM OLE API ComputerPC Microsoft Office Microsoft Office 97 Office 2000 Access Word Winword Excel Outlook Addins ASP Active Server Pages COMAddIns ActiveX-Controls OCX UserControl UserDocument Komponenten DLL EXE
Diese Seite wurde zuletzt aktualisiert am 10.03.2000

Diese Seite wurde zuletzt aktualisiert am 10.03.2000
Aktuell im ABOUT Visual Basic-MagazinGrundlagenwissen und TechnologienKnow How, Tipps und Tricks rund um Visual BasicActiveX-Komponenten, Controls, Klassen und mehr...AddIns für die Visual Basic-IDE und die VBA-IDEVBA-Programmierung in MS-Office und anderen AnwendungenScripting-Praxis für den Windows Scripting Host und das Scripting-ControlTools, Komponenten und Dienstleistungen des MarktesRessourcen für Programmierer (Bücher, Job-Börse)Dies&Das...

Themen und Stichwörter im ABOUT Visual Basic-Magazin
Code, Beispiele, Komponenten, Tools im Überblick, Shareware, Freeware
Ihre Service-Seite, Termine, Job-Börse
Melden Sie sich an, um in den vollen Genuss des ABOUT Visual Basic-Magazins zu kommen!
Informationen zum ABOUT Visual Basic-Magazin, Kontakt und Impressum

Zurück...

Trim(m) Strings fit!

Zurück...


Anzeige

(-hg) mailto:hg_trim@aboutvb.de

Die Visual Basic-Funktionen Trim, LTrim und RTrim (bzw. deren "pure" String-Versionen Trim$, LTrim$ und RTrim$) können nur alle Leerzeichen vom Anfang oder vom Ende eines Strings entfernen. Falls Sie andere Zeichen oder Zeichenketten wegtrimmen möchten, müssen Sie zur Selbsthilfe greifen.

Die in diesem Artikel vorgestellten Funktionen ersparen Ihnen die Arbeit, derartige Mechanismen immer wieder aufs Neue tippen oder selbst als Funktionen austüfteln zu müssen. Ganz so trivial ist das nämlich gar nicht, wenn der Code einigermaßen schnell sein soll. Zudem bieten unsere Funktionen den Vorteil, dass Sie optional angeben können, wie viele der zu entfernenden Zeichen bzw. eine Zeichenketten am Anfang oder Ende trotzdem noch stehen bleiben sollen. Diese Zusatzfunktionalität ist beispielsweise ganz nützlich, wenn über eine bestimmte Anzahl hinaus (etwa mehr als 2) überflüssige Zeilenumbrüche vom Ende eines Textes entfernt werden sollen.

Neben allgemeinen Version für beliebige Zeichen bzw. Zeichenketten stellen wir Ihnen auch spezialisierte Funktionen zur Verfügung, die Nullzeichen (Chr$(0)) und Zeilenumbrüche (vbCrLf) ohne den Overhead der allgemeinen Versionen entfernen. Zu jeder Variante gibt es eine Funktion, die wie Trim auf beiden Seiten eines Strings trimmt, und je eine, die wie LTrim oder RTrim nur eine Seite trimmen. Zu jeder dieser drei Trimmarten gibt es wiederum eine, die sowohl den zu trimmenden Text als auch das zu entfernende bzw. die zu entfernenden Zeichen als Variant-Parameter akzeptiert, wie ebenso eine, die pure String-Parameter erwartet (und daher etwas schneller ist). Diese Variant-Funktionen enthalten allerdings nichts weiter, als eine Prüfung, ob einer der Parameter ein Nullwert ist (wie er beispielsweise in uninitialisierten Datenbankfeldern enthalten ist) und einen Aufruf der entsprechenden Funktion mit String-Parameter.

Auf Grund der Nullprüfung verhalten sich die Variant-Funktionen wie die VB-Originale LTrim, RTrim und Trim. Wegen der optionalen Parameter sind sie sogar aufrufkompatibel - Sie brauchen ihren bisherigen Code nicht zu ändern, um diese Funktionen verwenden zu können. Verwenden Sie dagegen die VB-String-Versionen, reicht es, in Ihrem Code jeweils das "$"-Zeichen durch ein "S" zu ersetzen (Nehmen Sie aber das Modul mit unseren Funktionen von diesen Ersetzungen aus, da die VB-Originale darin benötigt werden!). Wollen Sie aus irgend einem Grund doch an einer Stelle die VB-Originale verwenden, genügt es, diesen den Qualifizierer "VBA." voranzustellen - zum Beispiel: VBA.LTrim(...).

Die naheliegendste Implementierung der universellen Trim-Funktionen wäre, mit Hilfe von Left$ und/oder Right$ so lange die zu trimmende Zeichenfolge abzuschneiden, wie sie noch am jeweiligen Ende auftritt. Dieses Verfahren kostet jedoch zunehmend mehr Zeit, je mehr Zeichen bzw. Zeichenfolgen abzuschneiden sind, da der zu bearbeitende String bei jeder Operation immer wieder umkopiert wird. Ist der zu trimmende Text-String selbst sehr lang, können Sie sich leicht ausmalen, welche Datenmengen dabei im Speicher hin und her geschaufelt werden müssen.

Das in unseren Funktionen verwendete Verfahren umgeht die Kopiererei. Es wird statt dessen einfach gezählt, wie oft das zu entfernende Zeichen bzw. die zu entfernende Zeichenfolge am jeweiligen Ende auftritt. Anschließend wird der zu trimmende String um die Länge der Anzahl der Vorkommen multipliziert mit der Länge des zu entfernenden Strings gekürzt.

Public Function LTrimS(Strg As String, _
 Optional TrimStrg As String, Optional ByVal Count As Long) _
 As String

  Dim nLenTrimStrg As Long
  Dim nLenStrg As Long
  Dim nStrg As String
  Dim nFound As Long
  Dim nCount As Long
  Dim l As Long
  
  If Count > 0 Then
    nCount = Count
  End If
  If Len(TrimStrg) = 0 Then
    If nCount Then
      nStrg = Strg
      nLenStrg = Len(nStrg)
      For l = 1 To nLenStrg
        If Mid$(nStrg, l, 1) = " " Then
          nFound = nFound + 1
        Else
          Exit For
        End If
      Next 'l
      nFound = nFound - nCount
      If nFound > 0 Then
        nStrg = Right$(nStrg, nLenStrg - nFound)
      End If
      LTrimS = nStrg
    Else
      LTrimS = VBA.LTrim$(Strg)
    End If
  Else
    nStrg = Strg
    nLenStrg = Len(nStrg)
    nLenTrimStrg = Len(TrimStrg)
    For l = 0 To nLenStrg - 1 Step nLenTrimStrg
      If Mid$(nStrg, 1 + l, nLenTrimStrg) = TrimStrg Then
        nFound = nFound + 1
      Else
        Exit For
      End If
    Next 'l
    nFound = nFound - nCount
    If nFound > 0 Then
      nStrg = Right$(nStrg, nLenStrg - nFound * nLenTrimStrg)
    End If
    LTrimS = nStrg
  End If
End Function

Public Function LTrim0S(Strg As String, _
 Optional ByVal Count As Long) As String

  Dim nLenStrg As Long
  Dim nStrg As String
  Dim nFound As Long
  Dim l As Long
  
  nStrg = Strg
  nLenStrg = Len(nStrg)
  For l = 1 To nLenStrg
    If Mid$(nStrg, l, 1) = vbNullChar Then
      nFound = nFound + 1
    Else
      Exit For
    End If
  Next 'l
  If Count > 0 Then
    nFound = nFound - Count
  End If
  If nFound > 0 Then
    nStrg = Right$(nStrg, nLenStrg - nFound)
  End If
  LTrim0S = nStrg
End Function

Public Function LTrimCrLfS(Strg As String, _
 Optional ByVal Count As Long) As String

  Dim nLenStrg As Long
  Dim nStrg As String
  Dim nFound As Long
  Dim l As Long
  
  nStrg = Strg
  nLenStrg = Len(nStrg)
  For l = 1 To nLenStrg Step 2
    If Mid$(nStrg, l, 2) = vbCrLf Then
      nFound = nFound + 1
    Else
      Exit For
    End If
  Next 'l
  If Count > 0 Then
    nFound = nFound - Count
  End If
  If nFound Then
    nStrg = Right$(nStrg, nLenStrg - nFound * 2)
  End If
  LTrimCrLfS = nStrg
End Function

Public Function RTrimS(Strg As String, _
 Optional TrimStrg As String, Optional ByVal Count As Long) _
 As String

  Dim nLenTrimStrg As Long
  Dim nLenStrg As Long
  Dim nStrg As String
  Dim nFound As Long
  Dim nCount As Long
  Dim l As Long
  
  If Count > 0 Then
    nCount = Count
  End If
  If Len(TrimStrg) = 0 Then
    If nCount Then
      nLenStrg = Len(nStrg)
      For l = nLenStrg To 1 Step -1
        If Mid$(nStrg, l, 1) = " " Then
          nFound = nFound + 1
        Else
          Exit For
        End If
      Next 'l
      nFound = nFound - nCount
      If nFound > 0 Then
        nStrg = Left$(nStrg, nLenStrg - nFound)
      End If
      RTrimS = nStrg
    Else
      RTrimS = VBA.RTrim$(nStrg)
    End If
  Else
    nStrg = Strg
    nLenStrg = Len(nStrg)
    nLenTrimStrg = Len(TrimStrg)
    For l = nLenStrg - nLenTrimStrg + 1 To 1 Step -nLenTrimStrg
      If Mid$(nStrg, l, nLenTrimStrg) = TrimStrg Then
        nFound = nFound + 1
      Else
        Exit For
      End If
    Next 'l
    nFound = nFound - nCount
    If nFound > 0 Then
      nStrg = Left$(nStrg, nLenStrg - nFound * nLenTrimStrg)
    End If
    RTrimS = nStrg
  End If
End Function

Public Function RTrim0S(Strg As String, _
 Optional ByVal Count As Long) As String

  Dim nLenStrg As Long
  Dim nStrg As String
  Dim nFound As Long
  Dim l As Long
  
  nStrg = Strg
  nLenStrg = Len(nStrg)
  For l = nLenStrg To 1 Step -1
    If Mid$(nStrg, l, 1) = vbNullChar Then
      nFound = nFound + 1
    Else
      Exit For
    End If
  Next 'l
  If Count > 0 Then
    nFound = nFound - Count
  End If
  If nFound > 0 Then
    nStrg = Left$(nStrg, nLenStrg - nFound)
  End If
  RTrim0S = nStrg
End Function

Public Function RTrimCrLfS(Strg As String, _
 Optional ByVal Count As Long) As String

  Dim nLenStrg As Long
  Dim nStrg As String
  Dim nFound As Long
  Dim l As Long
  
  nStrg = Strg
  nLenStrg = Len(nStrg)
  For l = nLenStrg - 1 To 1 Step -2
    If Mid$(nStrg, l, 2) = vbCrLf Then
      nFound = nFound + 1
    Else
      Exit For
    End If
  Next 'l
  If Count > 0 Then
    nFound = nFound - Count
  End If
  If nFound Then
    nStrg = Left$(nStrg, nLenStrg - nFound * 2)
  End If
  RTrimCrLfS = nStrg
End Function

Public Function TrimS(Strg As String, _
 Optional TrimStrg As String, Optional ByVal LCount As Long, _
 Optional ByVal RCount As Long) As String

  Dim nStrg As String
  
  nStrg = LTrimS(Strg, TrimStrg, LCount)
  TrimS = RTrimS(nStrg, TrimStrg, RCount)
End Function

Public Function Trim0S(Strg As String, _
 Optional ByVal LCount As Long, Optional ByVal RCount As Long) _
 As String

  Dim nStrg As String
  
  nStrg = LTrim0S(Strg, LCount)
  Trim0S = RTrim0S(nStrg, RCount)
End Function

Public Function TrimCrLfS(Strg As String, _
 Optional ByVal LCount As Long, Optional ByVal RCount As Long) _
 As String

  Dim nStrg As String
  
  nStrg = LTrimCrLfS(Strg, LCount)
  TrimCrLfS = RTrimCrLfS(nStrg, RCount)
End Function

Public Function LTrim(Strg As Variant, _
 Optional TrimStrg As Variant, Optional ByVal Count As Long) _
 As String

  If IsNull(Strg) Then
    LTrim = Strg
  Else
    LTrim = LTrimS(CStr(Strg), CStr(TrimStrg), Count)
  End If
End Function

Public Function LTrim0(Strg As Variant, _
 Optional ByVal Count As Long) As String

  If IsNull(Strg) Then
    LTrim0 = Strg
  Else
    LTrim0 = LTrim0S(CStr(Strg), Count)
  End If
End Function

Public Function LTrimCrLf(Strg As Variant, _
 Optional ByVal Count As Long) As String

  If IsNull(Strg) Then
    LTrimCrLf = Strg
  Else
    LTrimCrLf = LTrimCrLfS(CStr(Strg), Count)
  End If
End Function

Public Function RTrim(Strg As Variant, _
 Optional TrimStrg As Variant, Optional ByVal Count As Long) _
 As String

  If IsNull(Strg) Or IsNull(TrimStrg) Then
    RTrim = Strg
  Else
    RTrim = RTrimS(CStr(Strg), CStr(TrimStrg), Count)
  End If
End Function

Public Function RTrim0(Strg As Variant, _
 Optional ByVal Count As Long) As String

  If IsNull(Strg) Then
    RTrim0 = Strg
  Else
    RTrim0 = RTrim0S(CStr(Strg), Count)
  End If
End Function

Public Function RTrimCrLf(Strg As Variant, _
 Optional ByVal Count As Long) As String

  If IsNull(Strg) Then
    RTrimCrLf = Strg
  Else
    RTrimCrLf = RTrimCrLfS(CStr(Strg), Count)
  End If
End Function

Public Function Trim(Strg As Variant, _
 Optional TrimStrg As Variant, Optional ByVal LCount As Long, _
 Optional ByVal RCount As Long) As String

  If IsNull(Strg) Or IsNull(TrimStrg) Then
    Trim = Strg
  Else
    Trim = TrimS(CStr(Strg), CStr(TrimStrg), LCount, RCount)
  End If
End Function

Public Function Trim0(Strg As String, _
 Optional ByVal LCount As Long, Optional ByVal RCount As Long) _
 As String

  If IsNull(Strg) Then
    Trim0 = Strg
  Else
    Trim0 = Trim0S(CStr(Strg), LCount, RCount)
  End If
End Function

Public Function TrimCrLf(Strg As String, _
 Optional ByVal LCount As Long, Optional ByVal RCount As Long) _
 As String

  If IsNull(Strg) Then
    TrimCrLf = Strg
  Else
    TrimCrLf = TrimCrLfS(CStr(Strg), LCount, RCount)
  End If
End Function


Modul modTrim (modTrim.bas - ca. 8,2 KB)


Artikel
Zum Download-Bereich dieses Artikel
Mail an den Autor dieses Artikel

KnowHow
Zur KnowHow-Übersicht

KnowHow-Themen
Themen - Allgemeines
Themen - Entwicklungsumgebung (VB-IDE)
Themen - Forms
Themen - Steuerelemente (Controls)
Themen - Grafik
Themen - Dateien
Themen - UserControls
Themen - Einsteiger-Tipps
Themen - Wussten Sie...?

Übersicht nach Titeln in alphabetischer Reihenfolge
Übersicht nach Erscheinungsdatum

Schnellsuche



Zum Seitenanfang

Copyright © 1999 - 2017 Harald M. Genauck, ip-pro gmbh  /  Impressum

Zum Seitenanfang

Zurück...

Zurück...

Download Internet Explorer