Supportnet Computer
Planet of Tech

Supportnet / Forum / Datenbanken

ms access





Frage

ich möchte aus einer zeichenfolge, die durch Trennzeichen getrennt ist (Semikoklon/CSV) nur gewisse Daten (z.B. nach dem x-ten Semikolon) extrahieren. Kann mir da Jemand helfen?

Antwort 1 von Armin

hallo,

ich würde mit vba programmierung und den string funktionen arbeiten,

Die folgende Funktion kann helfen (aus dem Buch Das Access-VBA Codebook, von Grieshammer et al entnommen:


' code from Access VBA Code Book


'* ST06 ****************************************************
'Description:  Findet einen String zwischen zwei frei definierbaren Stellen
'Parameters:   strValue, [strFirstSep], [strSecondSep]
'API-Calls:
'References:
'Functions:
'Classes:
'Types:
'Enums:
'Constants:
'Return:       String
'* ST06 ****************************************************

Public Function GetStringBetweenSeperators( _
  ByVal strValue As String, _
  Optional ByVal strFirstSep As String, _
  Optional ByVal strSecondSep As String = "") As String

  Dim strTemp As String
  Dim intFoundFirst As Integer
  Dim intFoundSecond As Integer

  On Error Resume Next

  If strSecondSep = "" And Not strFirstSep = "" Then
    
    strTemp = Trim(Mid(strValue, _
      InStr(strValue, strFirstSep) + Len(strFirstSep)))
      
  ElseIf strFirstSep = "" And Not strSecondSep = "" Then
    
    strTemp = Trim(Mid(strValue, 1, _
      InStr(strValue, strSecondSep) - 1))
      
  ElseIf strFirstSep = "" And strSecondSep = "" Then
    
    strTemp = Trim(strValue)
      
  Else

    Do Until intFoundSecond > intFoundFirst
      
      intFoundFirst = InStr(strValue, strFirstSep) + _
        Len(strFirstSep)
      
      intFoundSecond = InStr(strValue, strSecondSep)

      If intFoundSecond < intFoundFirst Then
        
        intFoundSecond = InStr(intFoundSecond + 1, _
          strValue, strSecondSep)
      
      End If

    Loop
      
    intFoundSecond = intFoundSecond - _
      InStr(strValue, strFirstSep) - Len(strFirstSep)
      
    strTemp = Trim(Mid(strValue, intFoundFirst, _
      intFoundSecond))

  End If
   
  GetStringBetweenSeperators = strTemp
    
End Function


cu armin




Antwort 2 von El Bobbele

Moin!

Wenn du Access 2000 oder höher einsetzt, dann reicht auch folgende Variante:

Public Function GetElement(Data As String, Position As Long, _
                            Optional Delimiter As String = ";", _
                            Optional CompareMethod As VbCompareMethod = _
                            VbCompareMethod.vbBinaryCompare) As String
    Dim arr() As String
    
    On Error Resume Next
    arr = Split(Data, Delimiter, , CompareMethod)
    GetElement = arr(Position - 1)
End Function


Antwort 3 von Herbert

Hallo Markuss,
>ich möchte aus einer zeichenfolge, die durch >Trennzeichen getrennt ist (Semikoklon/CSV) nur >gewisse Daten (z.B. nach dem x-ten Semikolon) >extrahieren.
Hier mal ne simple Lösung von einem Praktiker.
Vielleicht nicht sehr elegant, aber gut nachvollziehbar.
Dim GesuchtesZeichen As String
Dim Ergebnis as String
Dim PosImSting as Long
Dim A, B as Long

Ergebnis = ""
PosImSting = 3 'Z.Beispiel nach dem 3. auftreten
GesuchtesZeichen = ";"
B = 0
For a = 1 to Len(MeinText)
if B = PosImSting Or B > PosImSting then
Ergebnis = Ergebnis & Mid(MeinText,a,1)
endif
if Mid(MeinText,A,1) = GesuchtesZeichen then
B = B + 1
endif
Next A

Falls ich keinen Tippfehler gemacht habe, muß es funktionieren.
Natürlich läßt sich diese Prozedur auf 2 Zeilen zusammenstreichen.
Nicht Profis sind aber vielleicht für die leichte Lesbarkeit dankbar.
Gruß Herbert und viel Erfolg...

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: