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:
cu armin
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:
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 FunctionAntwort 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 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...

