Wert aus Funktion übergeben

  • Hallo zusammen,

    ich steh mal wieder auf dem Schlauch ?(

    Ich will in einer Funktion eine INI Datei auslesen und den Wert in einer 2. Funktion verwenden.

    Die Variable habe ich so definiert:

    [autoit]

    Global $var_inifile_lesen

    [/autoit]

    Die INI Datei

    Code
    [Username]
    Zeit=15:11
    Wochentag=Montag
    Status=offline
    Kontingent=30
    Countdown=1

    Die Funktion:

    [autoit]

    Func _KCLIniLesen($var_inifile, $var_Benutzername, $var_inifile_key)
    $var_inifile_lesen = IniRead($var_inifile, $var_Benutzername, $var_inifile_key, "(NULL)")
    ConsoleWrite("Wert in der Funktion von " & $var_inifile_key & " ist: " & $var_inifile_lesen & @CRLF)
    EndFunc ;==>_KCLIniLesen

    [/autoit]

    Aufruf aus 2. Funktion:

    2. Funktion, die 1. Funktion aufruft
    [autoit]

    Func _KCLWochentag(); Es wird der Wochentag ermittelt
    $var_ShortDayName = _DateDayOfWeek(@WDAY, 1); Kurzen englischen Wochentag ermitteln (mon,tue,wed,thu,fri,sat,sun)
    $var_WeekDay = $var_ShortDayName
    $var_inifile_lesen = _KCLIniLesen($var_inifile, $var_Benutzername, "Zeit")
    ConsoleWrite("Wert außerhalb der Funktion von Zeit ($var_inifile_lesen) ist: " & $var_inifile_lesen & @CRLF)
    $var_inifile_Zeit = $var_inifile_lesen
    ConsoleWrite("Wert außerhalb der Funktion von Zeit ($var_inifile_Zeit) ist: " & $var_inifile_Zeit & @CRLF)
    ;~ $var_inifile_lesen = _KCLIniLesen($var_inifile, $var_Benutzername, "Countdown")
    ;~ $var_inifile_Countdown = $var_inifile_lesen
    ;~ ConsoleWrite("Wert außerhalb der Funktion von Countdown ist: " & $var_inifile_Countdown & @CRLF)
    Select
    Case $var_WeekDay = "Mon"
    $var_Wochentag = "Montag"
    _KCLIniSchreiben($var_inifile, $var_Benutzername, "Wochentag", $var_Wochentag)
    If $var_inifile_Zeit >= "08:00" And $var_inifile_Zeit <= "19:00" Then
    _KCLIniSchreiben($var_inifile, $var_Benutzername, "Status", "online")
    _KCLIniSchreiben($var_inifile, $var_Benutzername, "Kontingent", "30")
    Else
    _KCLIniSchreiben($var_inifile, $var_Benutzername, "Status", "offline")
    EndIf

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

    Case $var_WeekDay = "Tue"
    $var_Wochentag = "Dienstag"
    _KCLIniSchreiben($var_inifile, $var_Benutzername, "Wochentag", $var_Wochentag)
    If $var_inifile_Zeit >= "12:00" And $var_inifile_Zeit <= "19:00" Then
    _KCLIniSchreiben($var_inifile, $var_Benutzername, "Status", "online")
    _KCLIniSchreiben($var_inifile, $var_Benutzername, "Kontingent", "30")
    Else
    _KCLIniSchreiben($var_inifile, $var_Benutzername, "Status", "offline")
    EndIf

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

    Case $var_WeekDay = "Wed"
    $var_Wochentag = "Mittwoch"
    _KCLIniSchreiben($var_inifile, $var_Benutzername, "Wochentag", $var_Wochentag)
    If $var_inifile_Zeit >= "12:00" And $var_inifile_Zeit <= "19:00" Then
    _KCLIniSchreiben($var_inifile, $var_Benutzername, "Status", "online")
    _KCLIniSchreiben($var_inifile, $var_Benutzername, "Kontingent", "30")
    Else
    _KCLIniSchreiben($var_inifile, $var_Benutzername, "Status", "offline")
    EndIf

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

    Case $var_WeekDay = "Thu"
    $var_Wochentag = "Donnerstag"
    _KCLIniSchreiben($var_inifile, $var_Benutzername, "Wochentag", $var_Wochentag)
    If $var_inifile_Zeit >= "12:00" And $var_inifile_Zeit <= "19:00" Then
    _KCLIniSchreiben($var_inifile, $var_Benutzername, "Status", "online")
    _KCLIniSchreiben($var_inifile, $var_Benutzername, "Kontingent", "30")
    Else
    _KCLIniSchreiben($var_inifile, $var_Benutzername, "Status", "offline")
    EndIf

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

    Case $var_WeekDay = "Fri"
    $var_Wochentag = "Freitag"
    _KCLIniSchreiben($var_inifile, $var_Benutzername, "Wochentag", $var_Wochentag)
    If $var_inifile_Zeit >= "12:00" And $var_inifile_Zeit <= "20:00" Then
    _KCLIniSchreiben($var_inifile, $var_Benutzername, "Status", "online")
    _KCLIniSchreiben($var_inifile, $var_Benutzername, "Kontingent", "45")
    Else
    _KCLIniSchreiben($var_inifile, $var_Benutzername, "Status", "offline")
    EndIf

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

    Case $var_WeekDay = "Sat"
    $var_Wochentag = "Samstag"
    _KCLIniSchreiben($var_inifile, $var_Benutzername, "Wochentag", $var_Wochentag)
    If $var_inifile_Zeit >= "09:00" And $var_inifile_Zeit <= "21:00" Then
    _KCLIniSchreiben($var_inifile, $var_Benutzername, "Status", "online")
    _KCLIniSchreiben($var_inifile, $var_Benutzername, "Kontingent", "60")
    Else
    _KCLIniSchreiben($var_inifile, $var_Benutzername, "Status", "offline")
    EndIf

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

    Case $var_WeekDay = "Sun"
    $var_Wochentag = "Sonntag"
    _KCLIniSchreiben($var_inifile, $var_Benutzername, "Wochentag", $var_Wochentag)
    If $var_inifile_Zeit >= "09:00" And $var_inifile_Zeit <= "19:00" Then
    _KCLIniSchreiben($var_inifile, $var_Benutzername, "Status", "online")
    _KCLIniSchreiben($var_inifile, $var_Benutzername, "Kontingent", "45")
    Else
    _KCLIniSchreiben($var_inifile, $var_Benutzername, "Status", "offline")
    EndIf
    EndSelect
    EndFunc ;==>_KCLWochentag

    [/autoit]

    Die Consolenausgabe:
    "Wert in der Funktion von Zeit ist: 15:11"
    "Wert außerhalb der Funktion von Zeit ($var_inifile_lesen) ist: 0
    Wert außerhalb der Funktion von Zeit ($var_inifile_Zeit) ist: 0"

    Wieso wird der Wert der Zeit nicht extern übergeben ?

    Gruss Hassan

    Einmal editiert, zuletzt von HassanMullah (9. Juli 2012 um 16:33)

  • Hallo $var,

    ich "denke doch", das ich die Parameter übergebe (vielleicht liege ich mit meiner Annahme auch falsch)

    [autoit]

    $var_inifile_lesen = _KCLIniLesen($var_inifile, $var_Benutzername, "Zeit")

    [/autoit]

    $var_inifile ist bei mir als globale Variable so definiert:

    [autoit]

    Global $var_inifile = @AppDataDir & "\KCL.ini"

    [/autoit]

    und $var_Benutzername ist auch als Globale Variable ohne Wert, da dieser ebenfalls in einer Function ermittelt wird.

    Der Parameter "Zeit" wird ja an die Function _KCLIniLesen fest übergeben.

    Die Consolenausgabe ist ja dann:

    Wert in der Funktion von Zeit ist: 15:41 => Consolenausgabe in der Funktion _KCLIniLesen
    Wert außerhalb der Funktion von Zeit ($var_inifile_lesen) ist: 0 => Consolenausgabe aus 2. Funktion, welche 1. Funktion _KCLIniLesen aufruft
    Wert außerhalb der Funktion von Zeit ($var_inifile_Zeit) ist: 0 => Consolenausgabe aus 2. Funktion, welche 1. Funktion _KCLIniLesen aufruft

    Ich brauche jetzt praktisch eine Beispielscript, welche mir die "Zeit" 15:41 Uhr in die 2. Funktion übermittelt.

    Ich war eigentlich der Annahme, das diese Zeit in der Variablen $var_inifile_lesen stehen würde. Da ich aus der INI verschiedene Werte auslese, wollte ich dann den Wert von $var_inifile_lesen in die Variable $var_inifile_Zeit schreiben.

    Aber das klappt irgendwie nicht.

    Wie gesagt, über Beispiele würde ich mich sehr freuen, da ich das dann leichter nachvollziehen kann.

    Gruss Hassan

  • Ah, jetzt habe ich auch mal einen Blick in den Code geworfen...
    In der vierten Zeile der Funktion _KCLWochentag überschreibst du $var_inifile_lesen mit dem Rückgabewert von _KCLIniLesen.
    Nur dummerweise hat die Funktion _KCLIniLesen keinen Rückgabewert und deshalb bekommst du nichts, also 0.

    In der Func _KCLIniLesen musst du einfach den Wert returnen.

    [autoit]

    Func _KCLIniLesen($var_inifile, $var_Benutzername, $var_inifile_key)
    $var_inifile_lesen = IniRead($var_inifile, $var_Benutzername, $var_inifile_key, "(NULL)")
    ConsoleWrite("Wert in der Funktion von " & $var_inifile_key & " ist: " & $var_inifile_lesen & @CRLF)

    Return $var_inifile_lesen
    EndFunc ;==>_KCLIniLesen

    [/autoit]
    Zitat

    Wert in der Funktion von Zeit ist: 15:11
    Wert außerhalb der Funktion von Zeit ($var_inifile_lesen) ist: 15:11
    Wert außerhalb der Funktion von Zeit ($var_inifile_Zeit) ist: 15:11

  • Hi,

    nimm doch für die zurückzugebenden Variablen einfach "return" am Ende der Funktion:

    Spoiler anzeigen
    [autoit]

    $var = func1()
    MsgBox(0,"",$var)

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

    func func1()
    $1 = 1336+1
    return $1
    EndFunc

    [/autoit]

    Müsste verständlich sein :)

    Edit: Mist, zu langsam! :D

    Gruß
    x0r

    Simon nörgelt, Simon nervt - aber Simon verbessert die Welt. Glaubt er.