Parameter aus einem String lesen und wenn nicht vorhanden standardwert vergeben

  • VB.NET

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von jvbsl.

    Parameter aus einem String lesen und wenn nicht vorhanden standardwert vergeben

    Ich habe eine Zeichenfolge in der stehen Parameter drin. Wenn ein Parameter nicht drin ist, soll er standardwert bekommen. Wie kann ich das realisieren, evtl. mit Regex.


    "IsInstalled=0 And Type='Software'"
    geht es so weiter?
    also mit "And Variable=Wert And Variable=Wert"?

    ich denke auch, dass das mit RegEx wohl am einfachsten ist...

    Hast du denn eine Klasse mit den Variablen "IsInstalled" und "Type" usw.?->um das dann Dynamisch zu gestalten hätte ich evtl. Reflection verwendet.
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---

    VB.NET-Quellcode

    1. Dim Params() As String = x.Split("And")
    2. For i As Integer = 0 To Params.Count - 1
    3. Params(i) = Params(i).Trim().Split("=")(0).Trim()
    4. Next
    5. If (Not Params.Contains("Variablenname")) Then
    6. x += "Variablenname='Standardwert'"
    7. End If
    Meinst du so in etwa?

    Quellcode

    1. "(?<Variable>[^=]*)=(?<Value>[']?[^']*[']?[^ ]) And"

    das wäre mein RegEx dazu, ein Problem hat er noch, wenn es alle auslesen soll, musst du am Ende noch ein " And" anfügen, sonst Matcht es den letzten Wert nicht ;)

    nun kannst du mit Reflection die Properties festlegen, hierzu hab ich mal nen kleinen Code :P(vorraussetzung hierfür es muss eine Property mit demselben Namen existieren):

    VB.NET-Quellcode

    1. Dim reg As New RegEx("(?<Variable>[^=]*)=(?<Value>[']?[^']*[']?[^ ]) And")
    2. Dim input As String = "IsInstalled=0 And Type='Software'" & " And"
    3. Dim tp As Type = me.getType((
    4. For Each mt As Match In reg.Matches(input)
    5. Dim pI As Reflection.PropertyInfo = tp.GetProperty(mt.Groups("Variable").Value,Public Or NonPublic Or Instance)
    6. If pi isnot Nothing Then pI.Setvalue(Me,GetConverted(mt.Groups("Value").Value),Nothing)
    7. next
    8. Function GetConverted(Input As String) As Object
    9. If Input.Contains("'") Then
    10. Return Replace(input,"'","")
    11. ElseIf Input.ToLower() = "true" Or Input.ToLower() = "false" Then
    12. Return Boolean.Parse(Input)
    13. Else
    14. Return Integer.Parse(Input)
    15. End If
    16. End Function


    natürlich kannste das nicht so kopieren, aber ich denke vom Prinzip her sollte es stimmen...
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---