Da via PN noch eine Frage von @Marcello dazu kam, ich den Weg welchen er wählte weniger schön fand habe ich nun mal ein besseres Beispiel gemacht. Wobei die Felder in der Klasse Args so heissen müssen wie das Argument,
Das was mich hier dran noch stört, ist das alles in Klasse Args als String deklariert ist, könnte man nun noch die Typen anpassen.
-serverip
-> ServerIp
, wobei Gross/Kleinschrift egal ist, da die Argumentnamen klein geschrieben sind und auch ToLower beim Feldnamen angewendet wird.VB.NET-Quellcode
- Imports System.Text.RegularExpressions
- Imports System.Reflection
- Public Class Form1
- Public Class Args
- Public ServerIp As String
- Public ServerSteamPort As String
- Public ServerGamePort As String
- Public ServerQueryPort As String
- Public ServerName As String
- Public ServerPlayers As String
- Public Difficulty As String
- Public InitType As String
- Public Slot As String
- Public Overrides Function ToString() As String
- Dim fields() As FieldInfo = Me.GetType().GetFields()
- Dim result As String = "{"
- For i = 0 To fields.Length - 1
- result &= String.Format("{0}: ""{1}""", fields(i).Name, fields(i).GetValue(Me))
- If Not i = fields.Length - 1 Then
- result &= ", "
- End If
- Next
- result &= "}"
- Return result
- End Function
- End Class
- Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Shown
- Dim a As Args = ParseARGS("-serverip xxx.xxx.xxx.xxx -serversteamport 8766 -servergameport 27015 -serverqueryport 27016 -servername MyGame -serverplayers 8 -difficulty Normal -inittype Continue -slot 1")
- MessageBox.Show(a.ServerIp)
- MessageBox.Show(a.ToString)
- End Sub
- Public Function ParseARGS(ByVal arg As String) As Args
- Dim fields() As FieldInfo = GetType(Args).GetFields()
- Dim patternRaw As String = "(?<%FIELDNAME%>(?<=-%FIELDLOWERNAME%\s)(.*?)(?=(\s-)|($)))"
- Dim patterns() As String = New String(fields.Length - 1) {}
- For i = 0 To fields.Length - 1
- patterns(i) = patternRaw.Replace("%FIELDLOWERNAME%", fields(i).Name.ToLower)
- patterns(i) = patterns(i).Replace("%FIELDNAME%", fields(i).Name)
- Next
- Dim pattern As String = String.Join("|", patterns)
- Dim r As New Regex(pattern)
- Dim mc As MatchCollection = r.Matches(arg)
- Dim result As New Args
- For Each m As Match In mc
- For Each field As FieldInfo In fields
- If Not String.IsNullOrEmpty(m.Groups(field.Name).Value) Then
- field.SetValue(result, m.Groups(field.Name).Value)
- End If
- Next
- Next
- Return result
- End Function
- End Class
Das was mich hier dran noch stört, ist das alles in Klasse Args als String deklariert ist, könnte man nun noch die Typen anpassen.
Cloud Computer? Nein Danke! Das ist nur ein weiterer Schritt zur totalen Überwachung.
„Wer die Freiheit aufgibt, um Sicherheit zu gewinnen, wird am Ende beides verlieren.“
Benjamin Franklin
„Wer die Freiheit aufgibt, um Sicherheit zu gewinnen, wird am Ende beides verlieren.“
Benjamin Franklin
Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „NoIde“ ()