none
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

    Montag, 13. April 2015 14:40

Antworten

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

    Montag, 13. April 2015 14:46
    Moderator
  • 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

    Montag, 13. April 2015 14:50
  • 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 Next

    If 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

    Montag, 13. April 2015 15: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



    Montag, 13. April 2015 15:48
    Moderator
  • Danke Stefan,

    das hat hervorragend geklappt.

    Viele Grüße

    Patrick

    Dienstag, 14. April 2015 09:43