Seite 2 von 3
Verfasst: 23.05.2009 22:50
von AddMe
Hallo Zusammen,
vielen Dank für Eure Hilfe.
Wäre es möglich, mir noch Hilfestellung bei dem Problem des Feiertags zu geben? Wäre toll.
Ich bin leider noch nicht so fit, damit ich diese Feiertag in das Makro einbauen könnte.
Wäre echt super, wenn jemand das noch ergänzen könnte.
Vielen Dank.
Gruß
Michael
Verfasst: 23.05.2009 22:56
von Kaeru Gaman
also, wie du "Ostern" ermittelst, was ja anscheinend ein ziemlicher Angelpunkt ist, musst du dir irgendwo im Netz raussuchen.
Ich weiß nur, dass das Passah am 14. Nisan ist, das ist der erste Vollmond nach dem Frühlingsdurchgang,
aber der Römische Kirchen-Kalender stimmt nicht mit dem antiken Hebräischen Kalender überein.
sobald du ein Tagesdatum hast, kannst du es durch ParseDate jagen.
Verfasst: 23.05.2009 23:11
von AddMe
Kaeru Gaman hat geschrieben:also, wie du "Ostern" ermittelst, was ja anscheinend ein ziemlicher Angelpunkt ist, musst du dir irgendwo im Netz raussuchen.
sobald du ein Tagesdatum hast, kannst du es durch ParseDate jagen.
Danke für Deine Antwort.
Weiter oben hatte ich einen Code angefügt, der diese Berechnung, leider in VB durchführt. Mir fehlt es nur leider an Erfahrung, wie ich das in PB umsetzen könnte.
Wäre toll, wenn Du mir nochmal helfen könntest.
Vielen Dank.
Gruß
Michael
Verfasst: 23.05.2009 23:17
von Kaeru Gaman
es existiert kein m_uDTF-Objekt in PB!
du musst dir ne Formel für Ostern ausm Netz suchen.
Verfasst: 23.05.2009 23:30
von AddMe
Hallo Kaeru Gaman,
Kaeru Gaman hat geschrieben:es existiert kein m_uDTF-Objekt in PB!
Code: Alles auswählen
Type DtFeiertage
Jahreszahl As Long
Ostern As Date
Neujahr As Date
DreiKoenige As Date
Rosenmontag As Date
Aschermittwoch As Date
Karfreitag As Date
Ostersonntag As Date
Ostermontag As Date
Maifeiertag As Date
ChrHimmelfahrt As Date
Pfingstsonntag As Date
Pfingstmontag As Date
Fronleichnam As Date
MariaeHimmelfahrt As Date
DtEinheit As Date
Reformationstag As Date
Allerheiligen As Date
Heiligabend As Date
Weihnachten1 As Date
Weihnachten2 As Date
Sylvester As Date
End Type
Dim m_uDTF As DtFeiertage
Ist das hier in PB ein Objekt? Oder könnte das auch eine Struktur sein?
Bin leider Anfänger, deshalb Frage ich.
Kaeru Gaman hat geschrieben:du musst dir ne Formel für Ostern ausm Netz suchen.
Hm, vielen Dank für den Hinweis. Ist diese Formel, die ich weiter oben geschrieben habe im VB Code nicht ok??
Code: Alles auswählen
Function Ostern_berechnen(ByVal lYear As Long) As Boolean
'// Berechnung mit Hilfe des Algorithmus von Gauß
On Error GoTo Err_Ostern_berechnen
Dim i1 As Integer
Dim i2 As Integer
Dim i3 As Integer
Dim i4 As Integer
Dim i5 As Integer
Dim iTZ As Integer '// iTZ = Tageszahl
i1 = lYear Mod 19 '// Formel nach Gauß
i2 = lYear Mod 4 '// Werte für die Jahre
i3 = lYear Mod 7 '// 1900 - 2099
i4 = (19 * i1 + 24) Mod 30
i5 = (2 * i2 + 4 * i3 + 6 * i4 + 5) Mod 7
iTZ = 22 + i4 + i5 '// Ermittelt den Tag
If iTZ > 31 Then '// März oder April
iTZ = iTZ - 31 '// Wenn April, dann - 31 Tage
If iTZ = 26 Then iTZ = 19 '// Wenn 26.4. dann 19.4.
If (iTZ = 25 And i4 = 28 And i1 > 10) Then iTZ = 18
m_uDTF.Ostern = DateSerial(lYear, 4, iTZ) '// Ostern im April
Else
m_uDTF.Ostern = DateSerial(lYear, 3, iTZ) '// Ostern im Maerz
End If
Ostern_berechnen = True
Exit_Ostern_berechnen:
Exit Function
Nochmals vielen Dank für Deine Hilfe und Geduld mit mir.
Ist halt schwierig für mich dies umzusetzen.
Gruß
Michael
Verfasst: 23.05.2009 23:38
von ts-soft
Im CodeArchiv findeste eine etwas ältere PB Version für Ostern usw.
Verfasst: 24.05.2009 10:20
von Little John
Hallo Michael!
Ist halt schwierig für mich dies umzusetzen.
Der Code zur Oster-Berechnung eignet sich gut, um PureBasic und einige seiner Unterschiede zu Visual Basic kennen zu lernen. Die Umsetzung ist -- mit unserer Hilfe -- nicht schwierig, und Du wirst so viel mehr über PureBasic lernen, als wenn Du Dir fertigen Code kopierst.
Daher habe ich das absichtlich noch nicht fertig gemacht, sondern erstmal nur angefangen:
- ein paar Sachen gelöscht
- "Function" durch "Procedure" ersetzt
- "'//" durch ";" ersetzt
- einzeilige If/Then-Anweisungen in mehrzeilige umgewandelt
- "m_uDTF.Ostern =" durch "ProcedureReturn" ersetzt
Code: Alles auswählen
Procedure.i Ostern_berechnen (ByVal lYear As Long)
; Berechnung mit Hilfe des Algorithmus von Gauß
Dim i1 As Integer
Dim i2 As Integer
Dim i3 As Integer
Dim i4 As Integer
Dim i5 As Integer
Dim iTZ As Integer ; iTZ = Tageszahl
i1 = lYear Mod 19 ; Formel nach Gauß
i2 = lYear Mod 4 ; Werte für die Jahre
i3 = lYear Mod 7 ; 1900 - 2099
i4 = (19 * i1 + 24) Mod 30
i5 = (2 * i2 + 4 * i3 + 6 * i4 + 5) Mod 7
iTZ = 22 + i4 + i5 ; Ermittelt den Tag
If iTZ > 31 Then ; März oder April
iTZ = iTZ - 31 ; Wenn April, dann - 31 Tage
If iTZ = 26 Then
iTZ = 19 ; Wenn 26.4. dann 19.4.
End If
If (iTZ = 25 And i4 = 28 And i1 > 10) Then
iTZ = 18
End If
ProcedureReturn DateSerial(lYear, 4, iTZ) ; Ostern im April
Else
ProcedureReturn DateSerial(lYear, 3, iTZ) ; Ostern im Maerz
End If
EndProcedure
Nu kommst Du!
Versuche in der Hilfe Antworten auf folgende Fragen zu finden:
- Wie werden in PureBasic Prozedur-Parameter übergeben?
(Muss/darf in der Klammer "ByVal" bzw. "As" stehen?)
- Was muss in PureBasic statt "Dim ... As ..." stehen?
- Was muss in PureBasic statt "Mod" stehen?
- Was ist mit "Then"?
- Was ist mit "End If"?
- Welche Funktion muss in PureBasic statt "DateSerial()" benutzt werden?
Er reicht ja, wenn Du erstmal ein paar Antworten herausfindest.
Gruß, Little John
Verfasst: 24.05.2009 10:48
von X360 Andy
Vieleicht ist das noch wichtig; das FormateDate nur bis 19.01.2038, 03:14:07 verwendet werden kann.
Also falls du vorhast auszurechnen an welchen Tag Ostern in 50 Jahren ist, wirst du dir was anders überlegen müssen.
Verfasst: 24.05.2009 13:34
von AddMe
Hallo Little John,
Little John hat geschrieben:Daher habe ich das absichtlich noch nicht fertig gemacht, sondern erstmal nur angefangen:
- ein paar Sachen gelöscht
- "Function" durch "Procedure" ersetzt
- "'//" durch ";" ersetzt
- einzeilige If/Then-Anweisungen in mehrzeilige umgewandelt
- "m_uDTF.Ostern =" durch "ProcedureReturn" ersetzt
Vielen Dank für Deine Hilfe, echt super. Manchmal braucht man einfach nur einen Schubs in die richtige Richtung.
Werde versuchen Deine Hinweise und Tipps umzusetzen.
Echt Klasse.
Gruß
Michael
Verfasst: 24.05.2009 13:35
von AddMe
Hallo ts-soft,
hallo X360 Andy,
vielen Dank für Eure Hinweise.
Werde mal schauen, wie weit ich komme.
Gruß
Michael