Feiertagsberechnung

  • hi,
    lang ist es her das ich in Autoit etwas getan habe. Nun möchte ich gerne ein laufendes Script um die Feiertagsberechnung erweitern. Hier habe ich ein Script von Bugfix gefunden. Leider bekomme ich eine Fehlermeldung. Vllt. kann mir die jemand erklären.
    Ich bekomme diese Fehlermeldung:

    C:\Programme\AutoIt3\Include\_Feiertage(Jahr).au3(39,56) : ERROR: _Floor(): undefined function.
    $MM = 15 + $H1 - $H2 - _Floor(Int((8 * $H1 + 13) / 25))
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
    C:\Programme\AutoIt3\Include\_Feiertage(Jahr).au3 - 1 error(s), 0 warning(s)

    MFG ThomasB

    MFG ThomasB

    *
    Ich lese viel und gerne (und wenn ich alle Mahnungen durch habe, schmeiße ich sie weg)
    *

    Einmal editiert, zuletzt von Thomasb (26. Dezember 2008 um 13:13)

  • Hi
    also keine fehler bringt autoit wenn man statt

    [autoit]


    $MM = 15 + $H1 - $H2 - _Floor(Int((8 * $H1 + 13) / 25))

    [/autoit][autoit]


    $MM = 15 + $H1 - $H2 - Floor(Int((8 * $H1 + 13) / 25))

    [/autoit]


    hernimmt

    ich versteh zwar nicht wie man dann das ergebnis von diesem script ausgibt aber funktionieren tuts^^

    Padmak

  • hi,
    danke jetzt gehts. Die Ausgabefrage habe ich auch noch nicht ganz geklärt.

    MFG ThomasB

    *
    Ich lese viel und gerne (und wenn ich alle Mahnungen durch habe, schmeiße ich sie weg)
    *

  • hi
    gern geschehen^^
    so kann mans auslesen
    über weiterverwendung hab ich noch nicht nachgedacht^^

    Spoiler anzeigen
    [autoit]


    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    ; Funktion _Feiertage($Jahr)
    ;
    ; gibt die Feiertage des übergebenen Jahres
    ; als sortiertes Array[TT.MM.JJJJ \ Feiertag] zurück
    ; (Trennzeichen veränderbar über Variable: $Delimiter)
    ;
    ; Autor BugFix ([email='bug_fix@web.de'][/email])
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

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

    ;#include <math.au3>
    #include <Date.au3>
    #include <Array.au3>
    $year = InputBox("Jahr eingeben", "Jahr für Datumsberechung eingeben")
    Dim $HDays[32]
    _Feiertage(2008)
    _ArrayDisplay($HDays)

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

    Func _Feiertage($year)
    Dim $4AdvDat, $3AdvDat, $2AdvDat, $1AdvDat, $TotSoDat, $BuBDat, $MutterDat, $ErnteDat, $tmp, $Delimiter = "\"
    Dim $HDays[32]

    ;fixe Feiertage
    $HDays[0] = $year & "/01/01" & $Delimiter & "Neujahr"
    $HDays[1] = $year & "/01/06" & $Delimiter & "Heilige Drei Könige"
    $HDays[2] = $year & "/02/14" & $Delimiter & "Valentinstag"
    $HDays[3] = $year & "/05/01" & $Delimiter & "Maifeiertag"
    $HDays[4] = $year & "/10/03" & $Delimiter & "Tag der Deutschen Einheit"
    $HDays[5] = $year & "/10/31" & $Delimiter & "Reformationstag"
    $HDays[6] = $year & "/11/01" & $Delimiter & "Allerheiligen"
    $HDays[7] = $year & "/12/24" & $Delimiter & "Heiligabend"
    $HDays[8] = $year & "/12/25" & $Delimiter & "1. Weihnachtsfeiertag"
    $HDays[9] = $year & "/12/26" & $Delimiter & "2. Weihnachtsfeiertag"
    $HDays[10] = $year & "/12/31" & $Delimiter & "Silvester"

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

    ;variable Feiertage
    $aa = Mod($year, 19)
    $bb = Mod($year, 4)
    $cc = Mod($year, 7)
    $H1 = Int($year / 100)
    $H2 = Int($year / 400)
    $N = 4 + $H1 - $H2
    $MM = 15 + $H1 - $H2 - Floor(Int((8 * $H1 + 13) / 25))
    $dd = Mod((19 * $aa + $MM), 30)
    $ee = Mod((2 * $bb + 4 * $cc + 6 * $dd + $N), 7)
    If $dd + $ee = 35 Then
    $Easter = 50
    Else
    If $dd = 28 And $ee = 6 And $aa > 10 Then
    $Easter = 49
    Else
    $Easter = 22 + $dd + $ee
    EndIf
    EndIf
    If $Easter < 32 Then
    $EasterDay = $Easter
    $EasterMonth = "03"
    Else
    $EasterDay = $Easter - 31
    $EasterMonth = "04"
    EndIf
    If $EasterDay < 10 Then
    $EasterDay = "0" & $EasterDay
    EndIf

    If $year < 1900 Then ;Datumsoperationen nur mgl. wenn > 1900 , Jahr wird konvertiert
    $RestJahr = Mod($year, 100)
    If _DateIsLeapYear($year) Then
    If $RestJahr < 10 Then
    $RestJahr = "0" & $RestJahr
    EndIf
    $Tempyear = 20 & $RestJahr
    Else
    If $RestJahr < 10 Then
    $RestJahr = "0" & $RestJahr
    EndIf
    $Tempyear = 19 & $RestJahr
    EndIf
    $EasterDate = $Tempyear & "/" & $EasterMonth & "/" & $EasterDay
    Else
    $EasterDate = $year & "/" & $EasterMonth & "/" & $EasterDay
    EndIf
    $WFastDate = _DateAdd('d', -52, $EasterDate)
    $RosDat = _DateAdd('d', -48, $EasterDate)
    $FastDat = _DateAdd('d', -47, $EasterDate)
    $AschDat = _DateAdd('d', -46, $EasterDate)
    $GrDoDat = _DateAdd('d', -3, $EasterDate)
    $KarDat = _DateAdd('d', -2, $EasterDate)
    $OSaDat = _DateAdd('d', -1, $EasterDate)
    $OSoDat = $EasterDate
    $OMoDat = _DateAdd('d', 1, $EasterDate)
    $HiFaDat = _DateAdd('d', 39, $EasterDate)
    $PfSoDat = _DateAdd('d', 49, $EasterDate)
    $PfMoDat = _DateAdd('d', 50, $EasterDate)
    $FroDat = _DateAdd('d', 60, $EasterDate)

    ;Ermitteln nicht von Ostern abhängiger, veränderlicher Feiertage
    ;Muttertag = 2. Sonntag im Mai ABER wenn Pfingsten = 2.Sonntag im Mai dann ist Muttertag am 1. Sonntag
    ;Der 2. Sonntag kann nur zw. dem 8. u. 14.5. liegen
    For $maitag = 8 To 14
    If _DateToDayOfWeek($year, 5, $maitag) = 1 Then
    If $maitag < 10 Then
    $maitag = "0" & $maitag
    EndIf
    $MutterDat = $year & "/05/" & $maitag
    If $MutterDat = $PfSoDat Then
    $MutterDat = _DateAdd('d', -7, $year & "/05/" & $maitag)
    EndIf
    ExitLoop
    EndIf
    Next

    ;Erntedankfest 1. Sonntag im Oktober (zw. 1. u. 7.10.)
    For $oktobertag = 1 To 7
    If _DateToDayOfWeek($year, 10, $oktobertag) = 1 Then
    $oktobertag = "0" & $oktobertag
    $ErnteDat = $year & "/10/" & $oktobertag
    ExitLoop
    EndIf
    Next

    ;4.Advent = Sonntag vor 25.12. (zw. 18. u. 24.12.)
    For $deztag = 18 To 24
    If _DateToDayOfWeek($year, 12, $deztag) = 1 Then
    $4AdvDat = $year & "/12/" & $deztag
    $3AdvDat = _DateAdd('d', -7, $4AdvDat)
    $2AdvDat = _DateAdd('d', -14, $4AdvDat)
    $1AdvDat = _DateAdd('d', -21, $4AdvDat)
    $TotSoDat = _DateAdd('d', -28, $4AdvDat)
    $BuBDat = _DateAdd('d', -32, $4AdvDat)
    ExitLoop
    EndIf
    Next

    $HDays[11] = $WFastDate & $Delimiter & "Weiberfastnacht"
    $HDays[12] = $RosDat & $Delimiter & "Rosenmontag"
    $HDays[13] = $FastDat & $Delimiter & "Fastnacht"
    $HDays[14] = $AschDat & $Delimiter & "Aschermittwoch"
    $HDays[15] = $GrDoDat & $Delimiter & "Gründonnerstag"
    $HDays[16] = $KarDat & $Delimiter & "Karfreitag"
    $HDays[17] = $OSaDat & $Delimiter & "Ostersamstag"
    $HDays[18] = $OSoDat & $Delimiter & "Ostersonntag"
    $HDays[19] = $OMoDat & $Delimiter & "Ostermontag"
    $HDays[20] = $HiFaDat & $Delimiter & "Christi Himmelfahrt"
    $HDays[21] = $PfSoDat & $Delimiter & "Pfingstsonntag"
    $HDays[22] = $PfMoDat & $Delimiter & "Pfingstmontag"
    $HDays[23] = $MutterDat & $Delimiter & "Muttertag"
    $HDays[24] = $FroDat & $Delimiter & "Fronleichnam"
    $HDays[25] = $ErnteDat & $Delimiter & "Erntedankfest"
    $HDays[26] = $BuBDat & $Delimiter & "Buß- und Bettag"
    $HDays[27] = $TotSoDat & $Delimiter & "Totensonntag"
    $HDays[28] = $1AdvDat & $Delimiter & "1. Advent"
    $HDays[29] = $2AdvDat & $Delimiter & "2. Advent"
    $HDays[30] = $3AdvDat & $Delimiter & "3. Advent"
    $HDays[31] = $4AdvDat & $Delimiter & "4. Advent"
    _ArraySort($HDays)
    ;Datum konvertieren zu TT.MM.JJJJ
    For $i = 0 To 31
    $tmp = StringSplit($HDays[$i], $Delimiter)
    $HDays[$i] = StringMid($tmp[1], 9) & "." & StringMid($tmp[1], 6, 2) & "." & StringMid($tmp[1], 1, 4) & $Delimiter & $tmp[2]
    Next
    Return $HDays
    EndFunc ;==>_Feiertage

    [/autoit]

    Padmak

    Einmal editiert, zuletzt von Padmak (26. Dezember 2008 um 12:59)

  • hi,
    danke, ich habe es mit _filewritefromArray gelöst, da ich eine Datei benötig. ;)
    MFG ThomasB

    MFG ThomasB

    *
    Ich lese viel und gerne (und wenn ich alle Mahnungen durch habe, schmeiße ich sie weg)
    *