# Command Line Parsing and More

CodeGuru content and product recommendations are editorially independent. We may make money when you click on links to our partners. Learn More.

The following code will simplify command line parsing. The Functions and Subs are:

```Entry (position,txt,delim)
Numentries (txt,delim)
ParseCommandLine ()
```

The Entry function is usefull in many other areas. If you had a string that was "a/b/c/d" and you wanted to find out what the 3rd entry was you would use:

```x\$ = entry(3,"a/b/c/d","/")       '  x\$ would = "c".
x% = NumEntries("a/b/c/d","/")    ' x% = 4.
```

Run the ParaCommandLine from the main Form to set variables or actually run the various requests from the command\$.

Add the following code to a module called ENTRY.BAS.

```public Function Entry(byval Position as Integer, byval Txt as string, _
byval Delim as string) as string
'This function is the same as Progress' Entry function
on error resume next

Dim CurrentPosition as Integer, StrStart as Integer, _
StrEnd as Integer, StrCntr as Integer

StrStart = 1
CurrentPosition = 1
Txt = Txt & " "  'add a space to the end of the string

for StrCntr = 1 to len(Txt)
If mid(Txt, StrCntr, 1) = Delim Or StrCntr = len(Txt) then
StrEnd = StrCntr - 1

If StrEnd - StrStart < 0 then
Entry = ""
StrStart = StrCntr + 1
If CurrentPosition = Position then Exit Function
else
Entry = Trim(mid(Txt, StrStart, StrEnd - StrStart + 1))
If CurrentPosition = Position then Exit Function
StrStart = StrCntr + 1
End If
CurrentPosition = CurrentPosition + 1
End If
next

End Function

public Function NumEntries(byval Txt as string, _
byval Delim as string) as Integer
on error resume next
Dim StrCntr, DelimCntr as Integer

DelimCntr = 1
for StrCntr = 1 to len(Txt)
If mid(Txt, StrCntr, 1) = Delim then DelimCntr = DelimCntr + 1
next StrCntr

NumEntries = DelimCntr
End Function
```

The following sub can be placed on any form (usually them main form/module).

```public Type Parse
Param1 as Integer
Param2 as string
Param3 as Boolean
... how ever many parameters you will have
End Type

public CommandLine as Parse

public Sub ParseCommandLine()
Dim ThisParam as Integer
Dim CCntr as Integer
Dim CVCntr as Integer
Dim StartCmnd as Integer
Dim ParamType as string
Dim ParamValue as string

on error resume next

for ThisParam = 2 to NumEntries(Command\$, "/")
ParamType = Trim(Entry(1, Entry(ThisParam, _
Command\$, "/"), " "))

'Find the entire parameter value (upto next / or
'end of command\$)
ParamValue = ""
for CCntr = 1 to len(Command\$)
If mid(Command\$, CCntr, len(ParamType)) = ParamType then
StartCmnd = CCntr
for CVCntr = CCntr + len(ParamType) to len(Command\$) + 1
If mid(Command\$, CVCntr, 1) = "/" Or CVCntr = _
len(Command\$) + 1 then
ParamValue = Trim(mid(Command\$, StartCmnd + len(ParamType), _
CVCntr - StartCmnd - len(ParamType)))
Exit for
End If
next CVCntr
Exit for
End If
next CCntr

'set variables
Select Case UCase((ParamType))
Case "PARAM1"
' set THE CommandLine.xxxxx variable type here or
' perform operation
Case "PARAM2"
' set THE CommandLine.xxxxx variable type here or
' perform operation
Case "PARAM3"
' set THE CommandLine.xxxxx variable type here or
' perform operation ... HOW EVER MANY PARAMETERS YOU HAVE
End Select
next ThisParam
End Sub

```