Geburtstags-Erinnerer

  • Ich habe angefangen einen Geburtstags-Erinnerer zu scripten. Ich will noch einbauen, dass man einstellen kann wieviele Tage vorher man erinnert werden will. Doch ich weiß nicht genau wie ich dass machen soll. (Ich könnte es auch in einer GUI machen, doch ich will ersteinmal das Script haben)
    Geburtstags-Erinnerer: (kommt dann am besten in den Autostart)

    Spoiler anzeigen
    [autoit]

    Dim $anzahl, $name, $tag, $monat, $jahr, $alter, $selection, $selectionnumber = 1
    $filename = "geburtstage.ini"

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

    While 1
    $selection = "name " & $selectionnumber
    $name = IniRead($filename,$selection,"name","nix")
    $tag = IniRead($filename,$selection,"tag","nix")
    $monat = IniRead($filename,$selection,"monat","nix")
    $jahr = IniRead($filename,$selection,"jahr","nix")
    If $name = "nix" Then Exit
    If $tag = @MDAY Then
    If $monat = @MON Then
    $alter = @YEAR - $jahr
    MsgBox(0,"Geburtstags-Erinnerer",$name & " hat heute Geburtstag und wird " & $alter & " Jahre alt!")
    EndIf
    EndIf
    Sleep(500)
    $selectionnumber = $selectionnumber + 1
    WEnd

    [/autoit]

    Namen eingeben: (zum eingeben der Personen)

    Spoiler anzeigen
    [autoit]

    $filename = "geburtstage.ini"

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

    $name = InputBox("Geburtstags-Erinnerer", "Gebe den Namen der Person ein:")
    $tag = InputBox("Geburtstags-Erinnerer", "An welchem Tag ist die Person geboren: (01-31)")
    $monat = InputBox("Geburtstags-Erinnerer", "In welchem Monat ist die Person geboren: (01-12)")
    $jahr = InputBox("Geburtstags-Erinnerer", "In welchem Jahr ist die Person geboren: (z.B. 1999)")

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

    $anzahl = IniRead($filename,"sonstiges","anzahl",0)
    $anzahl = $anzahl + 1
    IniWrite($filename,"sonstiges","anzahl",$anzahl)
    IniWrite($filename,"name " & $anzahl,"name",$name)
    IniWrite($filename,"name " & $anzahl,"tag",$tag)
    IniWrite($filename,"name " & $anzahl,"monat",$monat)
    IniWrite($filename,"name " & $anzahl,"jahr",$jahr)

    [/autoit]
  • Hi MOZ,
    hier mal eine Lösung von mir:

    Errinnerer-Eingabemodul

    Spoiler anzeigen
    [autoit]

    $filename = "geburtstage.ini"
    $anzahl = IniRead($filename, "sonstiges", "anzahl", 0) + 1
    IniWrite($filename, "sonstiges", "anzahl", $anzahl)
    IniWrite($filename, "name " & $anzahl, "name", InputBox("Geburtstags-Erinnerer", "Gebe den Namen der Person ein:"))
    $datum = StringSplit(InputBox("Geburtstags-Erinnerer", "Wann ist die Person geboren?(nach DD.MM.YYYY"), ".")
    IniWrite($filename, "name " & $anzahl, "tag", $datum[1])
    IniWrite($filename, "name " & $anzahl, "monat", $datum[2])
    IniWrite($filename, "name " & $anzahl, "jahr", $datum[3])
    IniWrite($filename, "name " & $anzahl, "errinnern", InputBox("Geburtstags-Erinnerer", "Wie viele Tage vor dem Geburtstag möchten sie errinnert werden?(0-31)"))

    [/autoit]

    Errinnerer-Modul

    Spoiler anzeigen
    [autoit]

    Dim $selectionnumber = 1
    $filename = "geburtstage.ini"
    While 1
    $selection = "name " & $selectionnumber
    $name = IniRead($filename, $selection, "name", "nix")
    If $name = "nix" Then
    Exit
    ElseIf IniRead($filename, $selection, "tag", "nix") >= @MDAY- IniRead($filename, $selection, "errinnern", "nix") Then
    If IniRead($filename, $selection, "monat", "nix") = @MON Then
    $alter = @YEAR - IniRead($filename, $selection, "jahr", "nix")
    MsgBox(0, "Geburtstags-Erinnerer", $name & " hat heute Geburtstag und wird " & $alter & " Jahre alt!")
    EndIf
    EndIf
    $selectionnumber += 1
    WEnd

    [/autoit]


    Fehler werden noch nicht abgefangen.

    Mit freundlichem Gruß,


    Vinschni

  • Danke aber warum schreibt der dann "...hat heute Geburtstag.." ?
    und was ist wenn jemand am 30 Geburtstag hat und man 10 tage vorher erinnert werden will? geht das?

    • Problem 1: Logisch woran das liegt; weil es immer die gleiche Meldung ausgibt, egal ob er heute Geburtstag hat oder in X tagen.
    • Lösung:
      Spoiler anzeigen
      [autoit]

      Dim $selectionnumber = 1
      $filename = "geburtstage.ini"
      While 1
      $selection = "name " & $selectionnumber
      $name = IniRead($filename, $selection, "name", "nix")
      $monat = IniRead($filename, $selection, "monat", "nix")
      $tag = IniRead($filename, $selection, "tag", "nix")
      $alter = @YEAR - IniRead($filename, $selection, "jahr", "nix")
      $diff = @MDAY - IniRead($filename, $selection, "errinnern", "nix")
      If $name = "nix" Then
      Exit
      ElseIf $tag = @MDAY Then
      If $monat = @MON Then
      MsgBox(0, "Geburtstags-Erinnerer", $name & " hat heute Geburtstag und wird " & $alter & " Jahre alt!")
      EndIf
      ElseIf $tag >= $diff Then
      If $monat = @MON Then
      MsgBox(0, "Geburtstags-Erinnerer", $name & " hat in " & $diff & " Tage(n) Geburtstag und wird " & $alter & " Jahre alt werden!")
      EndIf
      EndIf
      $selectionnumber += 1
      WEnd

      [/autoit]
    • Problem 2: Das mit @MON & @MDAY zu lösen wird umständlich. Ich empfehle dir hier das Ganze mit @YDAY zu machen, dann ist es unabhänig von der Länge eines Monats. Dann müsstest du überlegen wie du die Eingabe machen möchtest(z.B. "Am wievielten Tag im Jahr hat X Geburtstag und in welchem Jahr ist er geobren?")

    MFG,

    Vinschni

    • Offizieller Beitrag

    Also die bisherigen Lösungsvorschläge gehen eigentlich alle am Ziel vorbei. ;)
    Schau dir die Funktion _DateAdd() an. Das ist alles was du brauchst.
    Vom Ablauf wäre relativ einfach:
    - 2D-Array [n][0] = Geburtsdatum; [n][1] = Tage vorher erinnern
    - beim Programmstart in Schleife prüfen ob TT.MM. Geburtstag & aktuelles Jahr - Erinnerungstage = Heute

  • Ich habe so etwas schon einmal in der Firma erstellt. Basiert auf einer MDB-Tabelle im Hintergrund, weil sie mit Access (ist ja vorhanden) einfacher zu pflegen ist.

    Ist aber nix besonderes, kommt halt nur ne MsgBox, letzten 3 Tage, heute und die nächsten 2 Tage werden angezeigt. Wenn Interesse ist, kann ich sie ab Montag nochmal hier zum Besten geben.

    Zur Nutzung dieses Forum's, ist ein Übersetzer für folgende Begriffe unerlässlich:

    "On-Bort, weier, verscheiden, schädliges, Butten steyling, näckstet, Parr, Porblem, scripe, Kompletenz, harken, manuel zu extramieren, geckukt, würglich, excell, acces oder Compilevorgeng"