Rubrik: Dateisystem · Ordner & Verzeichnisse | VB-Versionen: VB6 | 20.08.03 |
Pfade im Griff Zwei kleine Funktionen, die einem das Leben mit Pfaden leichter machen :-) | ||
Autor: Gero Bonow | Bewertung: | Views: 12.721 |
ohne Homepage | System: Win9x, WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 | kein Beispielprojekt |
Heute möchten wir Ihnen zwei kleine Funktionen vorstellen, die einem das Leben mit Pfadangaben in Strings leichter machen.
Public Function GetStr(ByVal Text As String, _ ByVal Separator As String, _ ByVal Index As Long, _ Optional ByVal SelectAllFromIndexToEnd As Boolean = False, _ Optional ByVal SelectAllFromStartToIndex As Boolean = False, _ Optional ByVal OnErrorReturnString As String = "Error in GetStr") _ As String ' Gibt einen Teilstring aus einer Zeichenfolge zurück, ' der sich zwischen Trennzeichen befindet. ' ' Beispiel: ' ' Text="C:\Windows\System\Rundll32.dll" ' Index=2 ' Separator="\" ' ' Der Aufruf würde folgendes zurückgeben: ' ' Optionen: Ausgabe von GetStr: ' ---------------------------------------------------------------- ' Alle Optional=False "Windows" ' SelectAllFromStartToIndex=True "C:\Windows" ' SelectAllFromIndexToEnd=True "Windows\System\Rundell32.dll" ' Alle Optional=True "C:\Windows\System\Rundll32.dll" ' ' Recht praktisch, wenn man z.B. Pfad und Dateiname ' voneinander Trennen will :-) ' ' Was passiert, wenn: ' ' Syntaktischer Fehler: Ausgabe von GetStr: ' ------------------------------------------------------------------ ' Separator="" Text ' Text="" "" ' Index <1 Text ' Index > als IndexCount im Text "" ' Separator länger/gleich lang Text "" ' Separator nicht gefunden Text Dim i As Long Dim Stellen As Long Dim Cache() As String Dim ZW As String On Error GoTo ExitByError If SelectAllFromStartToIndex And SelectAllFromIndexToEnd Then GetStr = Text End If If Len(Text) = 0 Or Len(Text) <= Len(Separator) Then GetStr = "" Exit Function End If If Len(Separator) = 0 Or Index < 1 Or _ InStr(1, Text, Separator) = 0 Then GetStr = Text Exit Function End If Cache = Split(Text, Separator) Stellen = UBound(Cache()) If (Stellen + 1) < Index Then GetStr = "" Exit Function End If If SelectAllFromStartToIndex Then For i = 0 To Index - 1 If i < Index - 1 Then ZW = ZW & Cache(i) & Separator Else ZW = ZW & Cache(i) End If Next i GetStr = ZW Exit Function End If If SelectAllFromIndexToEnd Then For i = Index - 1 To Stellen If i < Stellen Then ZW = ZW & Cache(i) & Separator Else ZW = ZW & Cache(i) End If Next i GetStr = ZW Exit Function End If GetStr = Cache(Index - 1) Exit Function ExitByError: GetStr = OnErrorReturnString End Function
Und noch eine kleine Hilfs-Funktion:
Public Function Stellen(ByVal Text As String, _ ByVal Separator As String, _ Optional ByVal OnErrorReturnValue As Long = -1) _ As Long ' Gibt die Anzahl der Stellen zurück, die via ' Trennzeichen markiert sind :-) ' Wird das Trennzeichen nicht gefunden, ' wird 1 zurückgegeben. Dim i As Long Dim Cache() As String On Error GoTo ExitByError If Len(Separator) = 0 Or Len(Text) = 0 Then Stellen = OnErrorReturnValue Exit Function End If If InStr(1, Text, Separator) = 0 Then Stellen = 1 Exit Function End If If Len(Separator) >= Len(Text) Then Stellen = OnErrorReturnValue Exit Function End If Cache = Split(Text, Separator) Stellen = UBound(Cache()) + 1 Exit Function ExitByError: Stellen = OnErrorReturnValue End Function
Die Beschreibung zur Anwendung der Funktionen entnehmen Sie bitte den Kommentaren im Funktions-Kopf.
Die Funktion GetStr eignet sich aber nicht nur für das Extrahieren einzelner Ordnernamen aus einer Pfadangabe, sondern für alle Strings, die sich aus Einzelstrings (durch ein bestimmtes Trennzeichen) zusammensetzen.