Matthias R - Mo 04.10.10 13:10
Titel: case xxx of var_string es geht um varstring
Hi ich bin Matthias, neu hier, 35 Jahre alt und hobbymässig mit Delphi 7 unterwegs.
Das ist mein erstes posting, ich bitte daher um nachsicht, (Wahrscheinlich werde ich zig Links zu dem Thema in diesem Forum kassieren :shock: )
Hab mir ein function gebastelt:
ermittelt die Anzahl der zwischen zwei Datumswerten liegenden
Tage, die auf Montag, Mittwoch, Donnerstag oder Freitag fallen
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| function get_offen(anfang,ende:tdate): integer; begin result:=0; while anfang <= ende do begin case DayOfWeek(anfang) of 2,4,5,6: begin inc(result); end; end; anfang := anfang+1; end; |
Wie kann ich die Tage, (Mo, Mi, Do, Fr) bzw (2,4,5,6) als Variable übergeben???
ich hab es mir so gedacht
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| function get_offen(anfang,ende:tdate): integer; var var_tage: string; begin var_tage:= '1,2,3,4'; result:=0; while anfang <= ende do begin case DayOfWeek(anfang) of var_tage: ..... end; |
Das klappt so natürlich nicht.
Auch nach stundenlanger Suche bin ich einfach nicht fündig geworden
Sämtliche von mir gefunden Antworten durch Tante Google behandeln nur das Thema vor
dem of und nicht die Statements dahinter.
Hoffe hier wird mir geholfen.
Danke schon mal im voraus für die vielen hilfreichen Antworten.
Matthias R - Mo 04.10.10 15:19
Hi und vielen Dank für die Antworten.
Anscheinend versteh ich dies Case Geschichte nicht so ganz.
Habe mir jetzt diese Lösung ausgedacht:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19:
| var regeltage:string; function get_offen(anfang,ende:tdate): integer; var i:Word; s:string; begin result:=0; while anfang <= ende do begin for i := 1 to Length(regeltage) do begin if DayOfWeek(anfang) = strtoint(Copy(regeltage,i,1)) then begin inc(result); end; end; anfang := anfang+1; end; end; |
baka0815 - Mo 04.10.10 17:04
Gerd Kayser hat folgendes geschrieben : |
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21:
| while Start <= Ende do begin Temp := DayOfTheWeek(Start) ; case Temp of 1 : if Temp in Wochentage then Inc(Result); 2 : if Temp in Wochentage then Inc(Result); 3 : if Temp in Wochentage then Inc(Result); 4 : if Temp in Wochentage then Inc(Result); 5 : if Temp in Wochentage then Inc(Result); 6 : if Temp in Wochentage then Inc(Result); 7 : if Temp in Wochentage then Inc(Result); end; Start := Start + 1; end; |
|
Das ist doch Quatsch. Da reicht doch einfach
if Temp in Wochentage then, wozu das
case drum herum?
Gerd Kayser hat folgendes geschrieben : |
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21:
| while Start <= Ende do begin Temp := DayOfTheWeek(Start); case Temp of 1 : if Wochentage and 2 = 2 then Inc(Result); 2 : if Wochentage and 4 = 4 then Inc(Result); 3 : if Wochentage and 8 = 8 then Inc(Result); 4 : if Wochentage and 16 = 16 then Inc(Result); 5 : if Wochentage and 32 = 32 then Inc(Result); 6 : if Wochentage and 64 = 64 then Inc(Result); 7 : if Wochentage and 128 = 128 then Inc(Result); end; Start := Start + 1; end; | |
Das ist genau so Quatsch, zumindest das 2 = 2, 4 = 4, etc. Das ist immer true. Du meinst and (Wochentage and 2) = 2.
Vergiss das, genau lesen ist wichtig.
Ich würde hier dann aber klammern, damit es übersichtlicher bleibt:
if (Wochentage and 2) = 2 then.
Gerd Kayser - Mo 04.10.10 17:38
baka0815 hat folgendes geschrieben : |
Das ist doch Quatsch. Da reicht doch einfach if Temp in Wochentage then, wozu das case drum herum? |
Ganz einfach: Weil der Threadstarter in seinem Source auch case verwendet hat (aber leider nur gefolgt von "..."), so daß ich davon ausgehe, daß er in seiner Funktion unterschiedlich auf die einzelnen Wochentage reagieren möchte. Und case steht auch im Betreff drinnen.