Modul "ProgramParameterParser"

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Benutzeravatar
Sicro
Beiträge: 955
Registriert: 11.08.2005 19:08
Kontaktdaten:

Modul "ProgramParameterParser"

Beitrag 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
Bild
Warum OpenSource eine Lizenz haben sollte :: PB-CodeArchiv-Rebirth :: Pleasant-Dark (Syntax-Farbschema) :: RegEx-Engine (kompiliert RegExes zu NFA/DFA)
Manjaro Xfce x64 (Hauptsystem) :: Windows 10 Home (VirtualBox) :: Neueste PureBasic-Version