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 29.10.2001

Diese Seite wurde zuletzt aktualisiert am 29.10.2001
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...

Zwischen den Grenzen

Zurück...


Anzeige

(-hg) mailto:hg_strinborders@aboutvb.de

Um einen Teil-String in einem anderen String zu ermitteln, wenn die Grenzen nicht als Position, sondern durch einen Anfangs- und einen End-String vorgegeben sind, fehlt eine Funktion in Visual Basic. Ebenfalls zum Ersetzen von Teil-Strings innerhalb von auf solche Weise vorgegebenen Grenzen fehlt.

Zur Ermittlung eines Teil-Strings werden im Prinzip die Positionen des Anfangs- und des End-Strings ermittelt, so dass sich der gesuchte Teil-String mittels der Mid$-Funktion extrahieren lässt. Die folgende Funktion InStrBorders erledigt dies und berücksichtigt dabei wie die InStr-Funktion optional eine Start-Position, ab der der Teil-String gesucht werden soll, als auch die optionale Angabe einer Vergleichsmethode.

Sie übergeben ihr in den ersten drei Parametern den Ausgangs-String, den Anfangs- und den End-String. Da eine Funktion nur einen Wert zurückgeben kann, jedoch nicht zwei Werte, wie hier gesucht (Start- und End-Position), werden diese Werte in den beiden darauffolgenden Parametern StartPos und EndPos zurückgegeben. Der eigentliche Rückgabewert der Funktion (Datentyp Boolean) liefert nur die Information, ob die Suche erfolgreich war. Im weiteren optionalen Parametern Start geben Sie die Startposition für die Suche an (Voreinstellung = 1), und im letzten, ebenfalls optionalen Parameter CompareMethod geben Sie (wie in InStr) die Vergleichsmethode an.

Public Function InStrBorders(Str As String, StartStr As String, _
 EndStr As String, Optional StartPos As Long, _
 Optional EndPos As Long, Optional ByVal Start As Long = 1, _
 Optional ByVal CompareMethod As VbCompareMethod = vbBinaryCompare) _
 As Boolean

  Dim nEndPos As Long
  
  StartPos = InStr(Start, Str, StartStr, CompareMethod)
  If StartPos Then
    nEndPos = _
     InStr(StartPos + Len(StartStr), Str, EndStr, CompareMethod)
    If nEndPos Then
      EndPos = nEndPos + Len(EndStr) - 1
      InStrBorders = True
    End If
  End If
End Function

Wenn Sie mit den ermittelten Grenzpositionen (StartPos und EndPos) alleine noch nicht viel anfangen können, sondern lieber gleich den eingegrenzten String erhalten möchten, liefert Ihnen diesen die Funktion InStrBordersStr direkt als Rückgabewert. Die Parameter sind die gleichen. Wenn Sie trotzdem Variablen als optionale Parameter für StartPos und EndPos übergeben, werden Ihnen zusätzlich die Grenzpositionen geliefert.

Public Function InStrBordersStr(Str As String, StartStr As String, _
 EndStr As String, Optional StartPos As Long, _
 Optional EndPos As Long, Optional ByVal Start As Long = 1, _
 Optional ByVal CompareMethod As VbCompareMethod = vbBinaryCompare) _
 As String

  Dim nEndPos As Long
  
  StartPos = InStr(Start, Str, StartStr, CompareMethod)
  If StartPos Then
    nEndPos = _
     InStr(StartPos + Len(StartStr), Str, EndStr, CompareMethod)
    If nEndPos Then
      EndPos = nEndPos + Len(EndStr) - 1
      InStrBordersStr = Mid$(Str, StartPos, EndPos - StartPos + 1)
    End If
  End If
End Function

Analog zur Funktion InStrRev (ab VB 6 zur Verfügung), die die Suche in einem gegebenen String vom Ende her beginnt, gibt es die beiden oben stehenden Funktionen auch in den Variationen InStrBordersRev und InStrBordersStrRev. Die Bedeutung der Parameter bleibt wie gehabt. Lediglich die Voreinstellung von des Parameters Start ist hier 0 - die Gesamtlänge des zu durchsuchenden Strings wird als Start-Position angenommen.

Public Function InStrBordersRev(Str As String, StartStr As String, _
 EndStr As String, Optional StartPos As Long, _
 Optional EndPos As Long, Optional ByVal Start As Long, _
 Optional ByVal CompareMethod As VbCompareMethod = vbBinaryCompare) _
 As Boolean

  Dim nEndPos As Long
  
  If Start = 0 Then
    Start = Len(Str)
  End If
  nEndPos = InStrRev(Str, EndStr, Start, CompareMethod)
  If nEndPos Then
    StartPos = InStrRev(Str, StartStr, nEndPos - 1, CompareMethod)
    If StartPos Then
      EndPos = nEndPos + Len(EndStr) - 1
      InStrBordersRev = True
    End If
  End If
End Function

Public Function InStrBordersStrRev(Str As String, _
 StartStr As String, EndStr As String, Optional StartPos As Long, _
 Optional EndPos As Long, Optional ByVal Start As Long, _
 Optional ByVal CompareMethod As VbCompareMethod = vbBinaryCompare) _
 As String

  Dim nEndPos As Long
  
  If Start = 0 Then
    Start = Len(Str)
  End If
  nEndPos = InStrRev(Str, EndStr, Start, CompareMethod)
  If nEndPos Then
    StartPos = InStrRev(Str, StartStr, nEndPos - 1, CompareMethod)
    If StartPos Then
      EndPos = nEndPos + Len(EndStr) - 1
      InStrBordersStrRev = _
       Mid$(Str, StartPos, EndPos - StartPos + 1)
    End If
  End If
End Function

Eine Kombination beider Suchrichtungen stellen die beiden folgenden Variationen der oben stehenden Funktionen dar. Bei ihnen wird der Start-String vom Anfang, der End-String jedoch vom Ende des zu durchsuchenden Strings her ermittelt. Zur Angabe der jeweiligen Start-Positionen dienen die beiden optionalen Parameter StartLeft (Voreinstellung = 1) und StartRight (Voreinstellung = 0, also Länge des Ausgangs-Strings), ansonsten sind die Bedeutungen der Parameter unverändert.

Public Function InStrBordersOuter(Str As String, _
 StartStr As String, EndStr As String, Optional StartPos As Long, _
 Optional EndPos As Long, Optional ByVal StartLeft As Long = 1, _
 Optional ByVal StartRight As Long, _
 Optional ByVal CompareMethod As VbCompareMethod = vbBinaryCompare) _
 As Boolean

  Dim nEndPos As Long
  
  StartPos = InStr(StartLeft, Str, StartStr, CompareMethod)
  If StartPos Then
    If StartRight = 0 Then
      StartRight = Len(Str)
    End If
    nEndPos = InStrRev(Str, EndStr, StartRight, CompareMethod)
    If nEndPos Then
      EndPos = nEndPos + Len(EndStr) - 1
      InStrBordersOuter = True
    End If
  End If
End Function

Public Function InStrBordersStrOuter(Str As String, _
 StartStr As String, EndStr As String, Optional StartPos As Long, _
 Optional EndPos As Long, Optional ByVal StartLeft As Long = 1, _
 Optional ByVal StartRight As Long, _
 Optional ByVal CompareMethod As VbCompareMethod = vbBinaryCompare) _
 As String

  Dim nEndPos As Long
  
  StartPos = InStr(StartLeft, Str, StartStr, CompareMethod)
  If StartPos Then
    If StartRight = 0 Then
      StartRight = Len(Str)
    End If
    nEndPos = InStrRev(Str, EndStr, StartRight, CompareMethod)
    If nEndPos Then
      EndPos = nEndPos + Len(EndStr) - 1
      InStrBordersStrOuter = _
       Mid$(Str, StartPos, EndPos - StartPos + 1)
    End If
  End If
End Function

Dem Wunsch, anhand von Grenz-Strings ermittelte Teil-Strings durch einen anderen String ersetzen zu lassen, kommt die Funktion ReplaceInBorders nach. Auch hier geben Sie zunächst den Ausgangs-String, den Start-String und den End-String an. Es folgt der String, der die gefundenen Teil-Strings ersetzen soll. In den weiteren Parametern Start und CompareMethod geben Sie wieder die Start-Position und die Vergleichsmethode an. In Count geben Sie an, wie oft die Ersetzungen erfolgen sollen. Im letzten optionalen Parameter ReplaceMode können Sie angeben, ob die Grenz-Strings mit ersetzt werden sollen, oder ob jeweils nur der tatsächlich dazwischen liegende Teil-String ersetzt werden soll.

Public Function ReplaceInBorders(Str As String, _
 StartStr As String, EndStr As String, ReplaceBy As String, _
 Optional ByVal Start As Long = 1, Optional ByVal Count As Long, _
 Optional ByVal CompareMethod As VbCompareMethod, _
 Optional ByVal ReplaceMode As ReplaceModeConstants) As String

  Dim nStartPos As Long
  Dim nEndPos As Long
  Dim nResult As String
  Dim nStart As Long
  Dim nFound As Boolean
  Dim nReplaceLen As Long
  Dim nLenStartStr As Long
  Dim nLenEndStr As Long
  
  ReplaceInBorders = Str
  If Start < 1 Then
    nStart = 1
  Else
    nStart = Start
  End If
  Select Case ReplaceMode
    Case rmBordersIncluded
      nReplaceLen = Len(ReplaceBy)
      If Count > 0 Then
        Do
          nFound = InStrBorders(ReplaceInBorders, StartStr, EndStr, _
           nStartPos, nEndPos, nStart, CompareMethod)
          If nFound Then
            ReplaceInBorders = Left$(ReplaceInBorders, nStartPos - 1) _
             & ReplaceBy & Mid$(ReplaceInBorders, nEndPos + 1)
            nStart = nStartPos + nReplaceLen
            Count = Count - 1
            If Count = 0 Then
              Exit Do
            End If
          Else
            Exit Do
          End If
        Loop
      Else
        Do
          nFound = InStrBorders(ReplaceInBorders, StartStr, EndStr, _
           nStartPos, nEndPos, nStart, CompareMethod)
          If nFound Then
            ReplaceInBorders = Left$(ReplaceInBorders, nStartPos - 1) _
             & ReplaceBy & Mid$(ReplaceInBorders, nEndPos + 1)
            nStart = nStartPos + nReplaceLen
          Else
            Exit Do
          End If
        Loop
      End If
    Case rmBetweenBorders
      nLenStartStr = Len(StartStr)
      nLenEndStr = Len(EndStr)
      nReplaceLen = Len(ReplaceBy) + nLenStartStr + nLenEndStr
      If Count > 0 Then
        Do
          nFound = InStrBorders(ReplaceInBorders, StartStr, EndStr, _
           nStartPos, nEndPos, nStart, CompareMethod)
          If nFound Then
            ReplaceInBorders = Left$(ReplaceInBorders, _
             nStartPos + nLenStartStr - 1) & ReplaceBy _
             & Mid$(ReplaceInBorders, nEndPos - nLenEndStr + 1)
            nStart = nStartPos + nReplaceLen
            Count = Count - 1
            If Count = 0 Then
              Exit Do
            End If
          Else
            Exit Do
          End If
        Loop
      Else
        Do
          nFound = InStrBorders(ReplaceInBorders, StartStr, EndStr, _
           nStartPos, nEndPos, nStart, CompareMethod)
          If nFound Then
            ReplaceInBorders = Left$(ReplaceInBorders, _
             nStartPos + nLenStartStr - 1) & ReplaceBy _
             & Mid$(ReplaceInBorders, nEndPos - nLenEndStr + 1)
            nStart = nStartPos + nReplaceLen
          Else
            Exit Do
          End If
        Loop
      End If
  End Select
End Function

Modul modStrInBorders (modStrInBorders.bas - ca. 7,5 KB)


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

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