devxlogo

Functions Parse Command Lines

Functions Parse Command Lines

Handling multiple command-line arguments has always been ugly in VB, especially when some of the arguments are quoted because they contain characters such as spaces. For example, if you want to write a program that takes as an argument a filename, you must quote the filename to ensure a space inside it doesn’t confuse your application. Unfortunately, there’s no built-in functionality for handling this mess. Here are two functions?GetParam and GetParamCount?that I use all the time. Each can handle a mix of quoted and unquoted parameters:

 Public Function GetParam(ByVal Count As Integer) As String	Dim i As Long	Dim j As Integer	Dim c As String	Dim bInside As Boolean	Dim bQuoted As Boolean	j = 1	bInside = False	bQuoted = False	GetParam = ""	For i = 1 To Len(Command)		c = Mid$(Command, i, 1)		If bInside And bQuoted Then			If c = """" Then				j = j + 1				bInside = False				bQuoted = False			End If		ElseIf bInside And Not bQuoted Then			If c = " " Then				j = j + 1				bInside = False				bQuoted = False			End If		Else			If c = """" Then				If j > Count Then Exit Function				bInside = True				bQuoted = True			ElseIf c  " " Then				If j > Count Then Exit Function				bInside = True				bQuoted = False			End If		End If		If bInside And j = Count And c  """" _			Then GetParam = GetParam & c	Next iEnd FunctionPublic Function GetParamCount() As Integer	Dim i As Long	Dim c As String	Dim bInside As Boolean	Dim bQuoted As Boolean	GetParamCount = 0	bInside = False	bQuoted = False	For i = 1 To Len(Command)		c = Mid$(Command, i, 1)		If bInside And bQuoted Then			If c = """" Then				GetParamCount = GetParamCount + 1				bInside = False				bQuoted = False			End If		ElseIf bInside And Not bQuoted Then			If c = " " Then				GetParamCount = GetParamCount + 1				bInside = False				bQuoted = False			End If		Else			If c = """" Then				bInside = True				bQuoted = True			ElseIf c  " " Then				bInside = True				bQuoted = False			End If		End If	Next i	If bInside Then GetParamCount = GetParamCount + 1End Function

devx-admin

Share the Post: