Seite 1 von 1

Modul "ProgramParameterParser"

Verfasst: 22.05.2016 12:07
von Sicro

Code: Alles auswählen

; Version: 1.0.1
; Werte bei kombinierten Parametern können nun nur gesetzt werden, wenn dies ausdrücklich erlaubt wird (AllowMultiSetValue=#True).
; Bei [-mt "Test"] und AllowMultiSetValue=#False wird nur dem Parameter "m" der Wert zugewiesen.

DeclareModule ProgramParameterParser
  Declare.i IsSet(LongName$, ShortName$="")
  Declare.s GetValue(LongName$, ShortName$="", DefaultValue$="", AllowMultiSetValue=#False)
EndDeclareModule

Module ProgramParameterParser
 
  Procedure.i IsSet(LongName$, ShortName$="")
    Protected i, x, Parameter$, Length
   
    For i = CountProgramParameters() - 1 To 0 Step -1
      Parameter$ = ProgramParameter(i)
     
      ; Prüfe nach langem Parameter
      If Left(Parameter$, 2) = "--"
       
        If Mid(Parameter$, 3, Len(LongName$)) = LongName$
          ProcedureReturn #True
        EndIf
         
      ; Prüfe nach kurzem Parameter
      ElseIf Left(Parameter$, 1) = "-" And ShortName$ <> ""
       
        Length = Len(Parameter$)
        For x = 2 To Length
          If Mid(Parameter$, x, 1) = ShortName$
            ProcedureReturn #True
          EndIf
        Next
       
      EndIf
    Next
   
    ProcedureReturn #False
  EndProcedure
 
  Procedure.s GetValue(LongName$, ShortName$="", DefaultValue$="", AllowMultiSetValue=#False)
    Protected i, x, Parameter$, Length
   
    For i = CountProgramParameters() - 1 To 0 Step -1
      Parameter$ = ProgramParameter(i)
     
      ; Prüfe nach langem Parameter
      If Left(Parameter$, 2) = "--"
       
        If Mid(Parameter$, 3, Len(LongName$)) = LongName$
          Parameter$ = ProgramParameter(i + 1)
          Break
        EndIf
         
      ; Prüfe nach kurzem Parameter
      ElseIf Left(Parameter$, 1) = "-" And ShortName$ <> ""
       
        Length = Len(Parameter$)
        For x = 2 To Length
          If Mid(Parameter$, x, 1) = ShortName$
            If x > 2 And Not AllowMultiSetValue
              Break
            EndIf
            Parameter$ = ProgramParameter(i + 1)
            Break 2
          EndIf
        Next
       
      EndIf
    Next
   
    If Left(Parameter$, 1) = "-" Or Left(Parameter$, 2) = "--"
      Parameter$ = ""
    EndIf
   
    If Parameter$ = ""
      Parameter$ = DefaultValue$
    EndIf
   
    ProcedureReturn Parameter$
  EndProcedure
 
EndModule

CompilerIf #PB_Compiler_IsMainFile

  ; ===============
  ; >> Beispiele <<
  ; ===============
 
  ; Programm.exe --version "1.0" --open "D:\InputFile" --save "D:\OutputFile" -oc
  ; Programm.exe --optimize --compress --version "1.0" --open "D:\InputFile" --save "D:\OutputFile"
  ; Programm.exe -o -c -v "1.0" --open "D:\InputFile" --save "D:\OutputFile"
 
  ; Parameter überschreiben:
 
  ; Programm.exe --open "D:\InputFile" --open "X:\Test\InputFile"
 
  ; Parameter kombinieren und allen einen Wert gleichzeitig übergeben:
 
  ; Programm.exe -mt "Test"
 
  Debug ProgramParameterParser::GetValue("version", "v", "UnkownVersion")
  Debug ProgramParameterParser::GetValue("open", "")
  Debug ProgramParameterParser::GetValue("save", "")
  Debug ProgramParameterParser::GetValue("message", "m")
  Debug ProgramParameterParser::GetValue("", "t", "", 0)
  If ProgramParameterParser::IsSet("optimize", "o")
    Debug "Optimierung ist aktiviert"
  EndIf
  If ProgramParameterParser::IsSet("compress", "c")
    Debug "Komprimierung ist aktiviert"
  EndIf
 
CompilerEndIf