Benutzer mit den meisten Antworten
StringTeilen

Frage
-
Hallo Zusammen,
ich habe einen String der variable so ausehen kann:
strString = "Wert1;Wert2;Wert3;strWertN"
Ich möchte nun gerne eine Funtion schreiben der ich den Text übergebe und gleichzeigig angebe welches Zeichen den Text trennt und welche Position ich haben will.
Der Aufruf der Function sähe also so aus:
Function ft_StringTeilen (strString as String, strTeiler as String, strPosition as String) as String
Ich übergebe also strString wie oben. Dazu strTeiler = ";" und strPosition = 2 und will dann ft_StringTeilen = "Wert2" erhalten.
Kann mir jemand sagen wie ich das am geschicktesten hinbekommen? Und - falls möglich - geht das auch mit SQL statt vba?
Vielen Dank für Eure Hilfe
Patrick
Antworten
-
Hallo Patrick,
VBA bietet hierfür die Methode Split an.
Dim Values As Variant Values = Split( "a;b;c", ";" )
Jet SQL bietet hierfür nichts an, da Du mit dem Array eh nichts anfangen könntest.
Wenn Du uns aber verrätst, was genau Du eigentlich mit den Werten hinterher machen willst, kann man evtl. eine Alternative anbieten.
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community- Als Antwort markiert Patrick Pohlmann Dienstag, 14. April 2015 09:42
-
Hallo Patrick,
Split liefert ein Array mit nullbasiertem Index zurück. In deinem Fall willst du das dritte Element, also würdest Du dann auf:
Dim DritterWert As String DritterWert = Values( 2 )
zugreifen. Vorher natürlich prüfen, ob es überhaupt so viele Elemente gibt. Das geht mittels der UBound Funktion.
http://www.herber.de/mailing/vb/html/vafctubound.htm
(Ist zwar für Excel, sollte in Access aber identisch klappen)
Warum Du das gerne in SQL hättest, weiß ich schon :) Aber da Du dort mit den Werten als Array eh nichts anfangen kannst, müsstest Du das in einer Funktion erledigen, die sich aber mit Jet SQL nur schlecht bis gar nicht umsetzen lässt. Für T-SQL schau mal hier:
http://stackoverflow.com/questions/10581772/how-to-split-a-comma-separated-value-to-columns
---
Nachtrag: Evtl. hilft dir das hier:
http://www.tek-tips.com/viewthread.cfm?qid=1694321
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community
- Bearbeitet Stefan FalzModerator Montag, 13. April 2015 15:51
- Als Antwort markiert Patrick Pohlmann Dienstag, 14. April 2015 09:42
Alle Antworten
-
Hallo Patrick,
VBA bietet hierfür die Methode Split an.
Dim Values As Variant Values = Split( "a;b;c", ";" )
Jet SQL bietet hierfür nichts an, da Du mit dem Array eh nichts anfangen könntest.
Wenn Du uns aber verrätst, was genau Du eigentlich mit den Werten hinterher machen willst, kann man evtl. eine Alternative anbieten.
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community- Als Antwort markiert Patrick Pohlmann Dienstag, 14. April 2015 09:42
-
Hallo Stefan,
ich habe in meinem Access Projekt des öfteren Funktionen von denen ich nicht nur einen Wert, sondern mehrere zurückbekommen will.
Bisher habe ich da dann immer individuell mit Instr, LEFT und RIGHT gearbeitet. Das würde ich jetzt gerne mit einer eigenen Funktion, wie beschrieben, vereinheitlichen.
Bei der Split Methode fehlt aber die Position, oder? Wie bekomme ich bspw. genau das "c"?
SQL einfach deshalb weil ich alles was ich mit SQL machen kann, lieber mit SQL mache.
Viele Grüße
Patrick
-
Hallo Patrick,
in VBA habe ich mir eine Funktion dafür erstellt die etwa so aussieht:
Function zerlege_Strg(ByVal Strg As String, Pos As Integer, Optional str_trenner As String) As String
'Beispielstring: 30#13#12#14#
On Error Resume NextIf str_trenner = "" Then str_trenner = "#"
Dim i As Integer
For i = 1 To Pos
zerlege_Strg = Left(Strg, InStr(Strg, str_trenner) - 1)
Strg = Right(Strg, Len(Strg) - InStr(Strg, str_trenner))
Next i
If err > 0 Then zerlege_Strg = "kein Wert"End Function
Die Funktion lässt sich auch für einen SQL-Server umschreiben. Im reinen SQL wird das ein sehr langer Codeschnipsel :)
Viele Grüße
Mike
-
Hallo Patrick,
Split liefert ein Array mit nullbasiertem Index zurück. In deinem Fall willst du das dritte Element, also würdest Du dann auf:
Dim DritterWert As String DritterWert = Values( 2 )
zugreifen. Vorher natürlich prüfen, ob es überhaupt so viele Elemente gibt. Das geht mittels der UBound Funktion.
http://www.herber.de/mailing/vb/html/vafctubound.htm
(Ist zwar für Excel, sollte in Access aber identisch klappen)
Warum Du das gerne in SQL hättest, weiß ich schon :) Aber da Du dort mit den Werten als Array eh nichts anfangen kannst, müsstest Du das in einer Funktion erledigen, die sich aber mit Jet SQL nur schlecht bis gar nicht umsetzen lässt. Für T-SQL schau mal hier:
http://stackoverflow.com/questions/10581772/how-to-split-a-comma-separated-value-to-columns
---
Nachtrag: Evtl. hilft dir das hier:
http://www.tek-tips.com/viewthread.cfm?qid=1694321
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community
- Bearbeitet Stefan FalzModerator Montag, 13. April 2015 15:51
- Als Antwort markiert Patrick Pohlmann Dienstag, 14. April 2015 09:42