Das Problem mit den Funktionen und den Rückgabewerten

  • Hallo zusammen,

    wieder einmal bastel ich mir nen altes Script neu und wieder einmal habe ich mir gedacht, mach es richtig, mach Funktionen. Nun funktioniert es eben mal wieder nicht wie ich es will.

    Hier mal das alte Script noch in der einfachen und unübersichtlichen Darstellung:

    Spoiler anzeigen
    [autoit]

    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_outfile=Tonerstandplugin.exe
    #AutoIt3Wrapper_Change2CUI=y
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    #include <Process.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Const $inifile = @ScriptDir&"\Tonerstandplugin.ini"
    $i = 0
    $y = 1
    $x = 1
    $Error = 0

    [/autoit] [autoit][/autoit] [autoit]

    $Section = IniReadSectionNames ($inifile)
    $maxArray = $Section[0]
    Dim $DruckerTyp[$maxArray]
    Dim $Tonerartikel[$maxArray]
    Dim $Artikelzusatz[$maxArray]
    Dim $Tonermeldebestand[$maxArray]
    Dim $Tonerbestand[$maxArray]
    Dim $TonerMaximalBestand[$maxArray]
    Dim $Meldung[$maxArray]
    Dim $TonerBestellmenge
    Dim $Output

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ; Ini-Datei wird ausgelesen und in die Arrays geschrieben. $Tonerbestand-/meldebstand werden als Zahl eingelesen, damit ein Verlgeich funktioniert.
    While $i < $maxArray
    $DruckerTyp[$i] = IniRead($inifile, $Section[$y], "DruckerTyp","")
    $Tonerartikel[$i] = IniRead($inifile, $Section[$y], "Tonerartikel","")
    $Artikelzusatz[$i] = IniRead($inifile, $Section[$y], "Artikelzusatz","")
    $Tonermeldebestand[$i] = Number(IniRead($inifile, $Section[$y], "Tonermeldebestand",""))
    $Tonerbestand[$i] = Number(IniRead($inifile, $Section[$y], "Tonerbestand",""))
    $TonerMaximalBestand[$i] = Number(IniRead($inifile, $Section[$y], "TonerMaximalBestand",""))
    $i = $i + 1
    $y = $y + 1
    WEnd

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    $y = 1
    $i = 0
    If $CmdLine[0] > 0 Then
    ; Hier wird der eigentliche Check ausgelöst. Dieser prüft den Tonerbestand gegenüber dem Meldebestand.
    If $CmdLine[1] == "check" Then

    $i = 0
    While $i < $maxArray
    If $Tonerbestand[$i] <= $Tonermeldebestand[$i] Then
    $TonerBestellMenge = $TonerMaximalBestand[$i] - $Tonerbestand[$i]
    $Meldung[$x] = '" | "'&$TonerBestellMenge&"x "&$Tonerartikel[$i]&" "&$Artikelzusatz[$i]&" fuer "&$DruckerTyp[$i]
    $x = $x +1
    $i = $i +1
    Else
    $i = $i +1
    EndIf
    WEnd

    If $x >1 Then
    $Error = 1
    EndIf
    ; Hier wird der $Output mit der $Meldung befüllt/ergenzt
    While $x > 0
    $Output = $Output &$Meldung[$x]
    $x = $x -1
    WEnd

    ; Wenn ein Meldebestand unterschritten worde ist, wird hier die Warnung ausgegeben, ansonsten ist alles OK.
    If $Error >= 1 Then
    _RunDOS("echo Tonerbestand KRITISCH ! "&$Output)
    exit 2
    Else
    _RunDOS("echo Tonerbestand OK")
    exit 0
    EndIf
    Else
    ; Hier wird der Tonerstand angepasst, wenn das Plugin mit dem $Tonerartikel als Parameter aufgerufen wird
    While $i < $maxArray
    If $CmdLine[1] == $Tonerartikel[$i] Then
    $Tonerbestand[$i] = $Tonerbestand[$i] - 1
    IniWrite ($inifile, $Section[$y], "Tonerbestand", $Tonerbestand[$i] )
    EndIf
    $y = $y +1
    $i = $i +1
    WEnd
    EndIf
    Else
    _RunDOS("echo Bitte Parameter mit angeben")
    exit 3
    EndIf

    [/autoit]


    und hier nun meine Version mit Funktionen:

    Spoiler anzeigen
    [autoit]

    #include <Process.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Dim $DruckerTyp[$maxArray]
    Dim $Tonerartikel[$maxArray]
    Dim $Artikelzusatz[$maxArray]
    Dim $Tonermeldebestand[$maxArray]
    Dim $Tonerbestand[$maxArray]
    Dim $TonerMaximalBestand[$maxArray]
    Dim $Meldung[$maxArray]
    Dim $TonerBestellmenge
    Dim $Output
    Dim $Section
    Dim $maxArray
    Dim $x
    Dim $y
    Dim $i

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Select
    Case $CmdLine[1] == "Geb.1"
    $inifile = @ScriptDir&"\1_Tonerstandplugin.ini"
    _INIlesen()
    _Tonerlisteanpassung()
    Case $CmdLine[1] == "Geb.2"
    $inifile = @ScriptDir&"\2_Tonerstandplugin.ini"
    _INIlesen()
    _Tonerlisteanpassung()
    Case $CmdLine[1] == "Geb.3"
    $inifile = @ScriptDir&"\3_Tonerstandplugin.ini"
    _INIlesen()
    _Tonerlisteanpassung()
    Case $CmdLine[1] == "Geb.4"
    $inifile = @ScriptDir&"\4_Tonerstandplugin.ini"
    _INIlesen()
    _Tonerlisteanpassung()
    Case $CmdLine[1] == "check"
    _INIlesen()
    _check()

    Case $CmdLine[0] < 0
    _RunDOS("echo Bitte Parameter mit angeben")
    exit 3

    [/autoit] [autoit][/autoit] [autoit]

    EndSelect

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func _INIlesen()
    $i = 0
    $y = 1
    $x = 1
    $Error = 0

    [/autoit] [autoit][/autoit] [autoit]

    $Section = IniReadSectionNames ($inifile)
    $maxArray = $Section[0]

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ; Ini-Datei wird ausgelesen und in die Arrays geschrieben. $Tonerbestand-/meldebstand werden als Zahl eingelesen, damit ein Verlgeich funktioniert.
    While $i < $maxArray
    $DruckerTyp[$i] = IniRead($inifile, $Section[$y], "DruckerTyp","")
    $Tonerartikel[$i] = IniRead($inifile, $Section[$y], "Tonerartikel","")
    $Artikelzusatz[$i] = IniRead($inifile, $Section[$y], "Artikelzusatz","")
    $Tonermeldebestand[$i] = Number(IniRead($inifile, $Section[$y], "Tonermeldebestand",""))
    $Tonerbestand[$i] = Number(IniRead($inifile, $Section[$y], "Tonerbestand",""))
    $TonerMaximalBestand[$i] = Number(IniRead($inifile, $Section[$y], "TonerMaximalBestand",""))
    $i = $i + 1
    $y = $y + 1
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    EndFunc

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func _check()
    ; Hier wird der eigentliche Check ausgelöst. Dieser prüft den Tonerbestand gegenüber dem Meldebestand.
    $y = 1
    $i = 0
    While $i < $maxArray
    If $Tonerbestand[$i] <= $Tonermeldebestand[$i] Then
    $TonerBestellMenge = $TonerMaximalBestand[$i] - $Tonerbestand[$i]
    $Meldung[$x] = '" | "'&$TonerBestellMenge&"x "&$Tonerartikel[$i]&" "&$Artikelzusatz[$i]&" fuer "&$DruckerTyp[$i]
    $x = $x +1
    $i = $i +1
    Else
    $i = $i +1
    EndIf
    WEnd

    If $x >1 Then
    $Error = 1
    EndIf
    ; Hier wird der $Output mit der $Meldung befüllt/ergenzt
    While $x > 0
    $Output = $Output &$Meldung[$x]
    $x = $x -1
    WEnd

    ; Wenn ein Meldebestand unterschritten worde ist, wird hier die Warnung ausgegeben, ansonsten ist alles OK.
    If $Error >= 1 Then
    _RunDOS("echo Tonerbestand KRITISCH ! "&$Output)
    exit 2
    Else
    _RunDOS("echo Tonerbestand OK")
    exit 0
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    EndFunc

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func _Tonerlisteanpassung()
    ; Hier wird der Tonerstand angepasst, wenn das Plugin mit dem $Tonerartikel als Parameter aufgerufen wird
    $i = 0
    $y = 1
    While $i < $maxArray
    If $CmdLine[2] == $Tonerartikel[$i] Then
    $Tonerbestand[$i] = $Tonerbestand[$i] - 1
    IniWrite ($inifile, $Section[$y], "Tonerbestand", $Tonerbestand[$i] )
    EndIf
    $y = $y +1
    $i = $i +1
    WEnd
    EndFunc

    [/autoit]


    Kann mir nun mal einer erklären, was ich tun muss, damit jede Funktion jede Variable kennt ??


    Danke im voraus.
    Grüße
    CrazyER

  • Zitat

    Kann mir nun mal einer erklären, was ich tun muss, damit jede Funktion jede Variable kennt ??

    ohne jetzt die scripte angesehn zu haben. damit jede funktion die variablen kennt müssen sie als Global deklariert sein.

  • Hallo CrazyER,

    hier das geänderte Skript:

    Spoiler anzeigen
    [autoit]

    #include <Process.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Global $maxArray = 10 ;anpassen auf Druckeranzahl
    Global $DruckerTyp[$maxArray]
    Global $Tonerartikel[$maxArray]
    Global $Artikelzusatz[$maxArray]
    Global $Tonermeldebestand[$maxArray]
    Global $Tonerbestand[$maxArray]
    Global $TonerMaximalBestand[$maxArray]
    Global $Meldung[$maxArray]
    Global $TonerBestellmenge
    Global $Output
    Global $Section
    Global $x
    Global $y
    Global $i

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Select
    Case $CmdLine[1] == "Geb.1"
    $inifile = @ScriptDir&"\1_Tonerstandplugin.ini"
    _INIlesen()
    _Tonerlisteanpassung()
    Case $CmdLine[1] == "Geb.2"
    $inifile = @ScriptDir&"\2_Tonerstandplugin.ini"
    _INIlesen()
    _Tonerlisteanpassung()
    Case $CmdLine[1] == "Geb.3"
    $inifile = @ScriptDir&"\3_Tonerstandplugin.ini"
    _INIlesen()
    _Tonerlisteanpassung()
    Case $CmdLine[1] == "Geb.4"
    $inifile = @ScriptDir&"\4_Tonerstandplugin.ini"
    _INIlesen()
    _Tonerlisteanpassung()
    Case $CmdLine[1] == "check"
    _INIlesen()
    _check()

    [/autoit] [autoit][/autoit] [autoit]

    Case $CmdLine[0] < 0
    _RunDOS("echo Bitte Parameter mit angeben")
    exit 3

    [/autoit] [autoit][/autoit] [autoit]

    EndSelect

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func _INIlesen()
    $i = 0
    $y = 1
    $x = 1
    $Error = 0

    [/autoit] [autoit][/autoit] [autoit]

    $Section = IniReadSectionNames ($inifile)
    $maxArray = $Section[0]

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ; Ini-Datei wird ausgelesen und in die Arrays geschrieben. $Tonerbestand-/meldebstand werden als Zahl eingelesen, damit ein Verlgeich funktioniert.
    While $i < $maxArray
    $DruckerTyp[$i] = IniRead($inifile, $Section[$y], "DruckerTyp","")
    $Tonerartikel[$i] = IniRead($inifile, $Section[$y], "Tonerartikel","")
    $Artikelzusatz[$i] = IniRead($inifile, $Section[$y], "Artikelzusatz","")
    $Tonermeldebestand[$i] = Number(IniRead($inifile, $Section[$y], "Tonermeldebestand",""))
    $Tonerbestand[$i] = Number(IniRead($inifile, $Section[$y], "Tonerbestand",""))
    $TonerMaximalBestand[$i] = Number(IniRead($inifile, $Section[$y], "TonerMaximalBestand",""))
    $i = $i + 1
    $y = $y + 1
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    EndFunc

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func _check()
    ; Hier wird der eigentliche Check ausgelöst. Dieser prüft den Tonerbestand gegenüber dem Meldebestand.
    $y = 1
    $i = 0
    While $i < $maxArray
    If $Tonerbestand[$i] <= $Tonermeldebestand[$i] Then
    $TonerBestellMenge = $TonerMaximalBestand[$i] - $Tonerbestand[$i]
    $Meldung[$x] = '" | "'&$TonerBestellMenge&"x "&$Tonerartikel[$i]&" "&$Artikelzusatz[$i]&" fuer "&$DruckerTyp[$i]
    $x = $x +1
    $i = $i +1
    Else
    $i = $i +1
    EndIf
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    If $x >1 Then
    $Error = 1
    EndIf
    ; Hier wird der $Output mit der $Meldung befüllt/ergenzt
    While $x > 0
    $Output = $Output &$Meldung[$x]
    $x = $x -1
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    ; Wenn ein Meldebestand unterschritten worde ist, wird hier die Warnung ausgegeben, ansonsten ist alles OK.
    If $Error >= 1 Then
    _RunDOS("echo Tonerbestand KRITISCH ! "&$Output)
    exit 2
    Else
    _RunDOS("echo Tonerbestand OK")
    exit 0
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    EndFunc

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func _Tonerlisteanpassung()
    ; Hier wird der Tonerstand angepasst, wenn das Plugin mit dem $Tonerartikel als Parameter aufgerufen wird
    $i = 0
    $y = 1
    While $i < $maxArray
    If $CmdLine[2] == $Tonerartikel[$i] Then
    $Tonerbestand[$i] = $Tonerbestand[$i] - 1
    IniWrite ($inifile, $Section[$y], "Tonerbestand", $Tonerbestand[$i] )
    EndIf
    $y = $y +1
    $i = $i +1
    WEnd
    EndFunc

    [/autoit]


    mfg (Auto)Bert