Command Line Parsing and 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


More by Author

Must Read