Login | Register   
LinkedIn
Google+
Twitter
RSS Feed
Download our iPhone app
TODAY'S HEADLINES  |   ARTICLE ARCHIVE  |   FORUMS  |   TIP BANK
Browse DevX
Sign up for e-mail newsletters from DevX


Tip of the Day
Language: Visual Basic
Expertise: Intermediate
Feb 24, 2000

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 i
End Function

Public 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 + 1
End Function
Konstantin Komissarchik
 
Comment and Contribute

 

 

 

 

 


(Maximum characters: 1200). You have 1200 characters left.

 

 

Sitemap
Thanks for your registration, follow us on our social networks to keep up-to-date