Imports System.Text.RegularExpressions Imports DigitalData.Modules.Logging Imports DigitalData.Modules.Base ''' ''' Parses Commandline Arguments. Used to jump to a specific point in the application. ''' ''' Example: --start-search=id#7~doctype#ARE ''' Public Class ClassCommandlineArgs Inherits BaseClass Private CommandLineArgTypes As New List(Of String) From { "show-profile", "start-search" } Private CommandLineArgTypeString As String = String.Join("|", CommandLineArgTypes) Private CommandLineArgRegex As String = $"(?:-{{2}}(?:({CommandLineArgTypeString})+)=([a-zA-Z0-9~|]+)\s*)+" Private CommandLineArgParameterRegex As String = "(?:~{0,1}([\w\d-]+|[\w\d-]+))+" Public FunctionName As String Public FunctionArgs As New Dictionary(Of String, String) Public Sub New(pLogConfig As LogConfig) MyBase.New(pLogConfig) End Sub Public Sub Parse(Args As List(Of String)) Dim oRegex = New Regex(CommandLineArgRegex) Dim oArgRegex = New Regex(CommandLineArgParameterRegex) Logger.Debug("Application started with {0} arguments", Args.Count) For Each oArg In Args Dim oMatch = oRegex.Match(oArg) Dim oGroups = oMatch.Groups If oMatch.Success = False Then Logger.Warn("The Argument [{0}] did not match the required format and was discarded!", oArg) Continue For End If Dim oParamName As String = oGroups.Item(1).Value.Replace("--", "") Dim oParamValue As String = oGroups.Item(2).Value If oArgRegex.IsMatch(oParamValue) Then FunctionName = oParamName For Each oValue As String In oParamValue.Split("~"c) Dim oValueArray = oValue.Split("|"c).ToList FunctionArgs.Add(oValueArray.Item(0), oValueArray.Item(1)) Next Else Throw New ArgumentException($"Parameters did not match the required format!", "pValue") End If Next End Sub End Class