Überprüfung Falsch ?

Anfängerfragen zum Programmieren mit PureBasic.
Fanpost
Beiträge: 97
Registriert: 27.01.2013 14:43

Überprüfung Falsch ?

Beitrag von Fanpost »

Hallo, ich habe wieder mal ein kleines Problem. In einem Programm überprüfe ich die Kalenderwoche von 1 bis 53 (es gibt Jahre mit 53 Kalenderwochen, ist aber hier nicht von Bedeutung)
Nun kommt ein Phänomen. Bei der Eingabe von 6,7,8 oder 9 gibt es eine Fehlermeldung. Warum ?? Wo liegt der Fehler ??

Abgespecktes Prog:

Code: Alles auswählen

Enumeration
	#window
	#start_button_mit
	#kalewo
	#kalewotext
EndEnumeration


Procedure.b GetKW(PJahr.w,PMonat.b,PTag.b) ; Ermittlung der Kalenderwoche
WT4J.b = DayOfWeek(Date(PJahr.w,1,4,0,0,0))
If WT4J.b = 0 : WT4J.b = 7 : EndIf
MoKW1.b = 4-WT4J.b
WTGD.b = DayOfWeek(Date(PJahr.w,PMonat.b,PTag.b,0,0,0))
If WTGD.b = 0 : WTGD.b = 7 : EndIf
MoGD.w = DayOfYear(Date(PJahr.w,PMonat.b,PTag.b,0,0,0))-WTGD.b
KW.b = Int((MoGD.w-MoKW1.b)/7)+1
If PMonat.b = 12
	Week1Q.w = DayOfYear(Date(PJahr.w,PMonat.b,PTag.b,0,0,0))
	WT4JNY.b = DayOfWeek(Date(PJahr.w+1,1,4,0,0,0))
If WT4JNY.b = 0 : WT4JNY.b = 7 : EndIf
	LastYDay.w = DayOfYear(Date(PJahr.w,12,31,0,0,0))
	If LastYDay.w - Week1Q.w < WT4JNY.b -4
		KW.b = 1
	EndIf
EndIf
If PMonat.b = 1 And PTag.b < 4
	If WT4J.b < WTGD.b
		KW.b = GetKW(PJahr.w-1,12,31)
	EndIf
EndIf
ProcedureReturn KW.b
EndProcedure



Procedure Hauptfenster(kw)
OpenWindow(#window,500,200,457,100,"Kalenderwochen Problem", #WS_OVERLAPPEDWINDOW|#PB_Window_ScreenCentered )
ButtonGadget(#start_button_mit,130,60,186,20,"Kalenderwoche Prüfen")
TextGadget  (#kalewo,30, 12, 100,20,"Kalenderwoche:")
StringGadget(#kalewotext, 120, 10, 20, 19,  ""+kw)
TextGadget(#PB_Any,160,12,250,20,"Kalenderwoche kann manuell geändert werden!")
ProcedureReturn
EndProcedure



Procedure generate_anz(kw)
kalwo$ = GetGadgetText(#kalewotext)
If kalwo$ < "1" Or kalwo$ >"53"; es gibt Jahre mit 53 Kalenderwochen!
	MessageRequester("Fehler", "Kalenderwoche falsch eingegeben!", #PB_MessageRequester_Ok)
	SetGadgetText(#kalewotext,""+kw)
Else
	MessageRequester("Meldung", "Kalenderwoche OK!", #PB_MessageRequester_Ok)
	SetGadgetText(#kalewotext,""+kw)
EndIf
EndProcedure


date.l = Date()
kw=GetKW(Year(date),Month(date),Day(date))
Hauptfenster(kw)

Repeat
Select WindowEvent()
Case #PB_Event_CloseWindow
	Exit = 1
Case #PB_Event_Gadget
	Select EventGadget()
	Case #start_button_mit
		generate_anz(kw)
	EndSelect
EndSelect
Until Exit

Benutzeravatar
Sicro
Beiträge: 955
Registriert: 11.08.2005 19:08
Kontaktdaten:

Re: Überprüfung Falsch ?

Beitrag von Sicro »

Code: Alles auswählen

kalwo$ = GetGadgetText(#kalewotext)
If kalwo$ < "1" Or kalwo$ > "53"
ändern zu

Code: Alles auswählen

kalwo = Val(GetGadgetText(#kalewotext))
If kalwo < 1 Or kalwo > 53
Außerdem: Lass die Variablentypen (.b, .w, .l) weg, die sind nur in speziellen Fällen sinnvoll.
Bild
Warum OpenSource eine Lizenz haben sollte :: PB-CodeArchiv-Rebirth :: Pleasant-Dark (Syntax-Farbschema) :: RegEx-Engine (kompiliert RegExes zu NFA/DFA)
Manjaro Xfce x64 (Hauptsystem) :: Windows 10 Home (VirtualBox) :: Neueste PureBasic-Version
Fanpost
Beiträge: 97
Registriert: 27.01.2013 14:43

Re: Überprüfung Falsch ?

Beitrag von Fanpost »

@Sicro

Danke für die schnelle Meldung. Nun funktioniert es (aber warum geht mein Code nicht?)
Benutzeravatar
hjbremer
Beiträge: 822
Registriert: 27.02.2006 22:30
Computerausstattung: von gestern
Wohnort: Neumünster

Re: Überprüfung Falsch ?

Beitrag von hjbremer »

bei einem Stringvergleich wird Zeichen für Zeichen verglichen
bei numerischem Vergleich gelten die Zahlenwerte

bei "53" wird das 1.Zeichen genommen und mit "6" verglichen
und Schwups ist 6 größer
Purebasic 5.70 x86 5.72 X 64 - Windows 10

Der Computer hat dem menschlichen Gehirn gegenüber nur einen Vorteil: Er wird benutzt
grüße hjbremer
Fanpost
Beiträge: 97
Registriert: 27.01.2013 14:43

Re: Überprüfung Falsch ?

Beitrag von Fanpost »

@hjbremer

Ohhhmannnn, klar - Danke!
Antworten