if oder case

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
gillian_x
Beiträge: 30
Registriert: Sa 22. Nov 2014, 14:24

if oder case

Beitrag von gillian_x »

Hallo liebe Gemeinde!

Ich müsste mal wieder eure Großzügige Hilfe in Anspruch nehmen! :)

Folgende Situation:

Ich möchte für ein Jahr runterschreiben ob es sich um einen Werktag oder Wochenende handelt (für jeden Tag), so habe ich mal angefangen:

Code: Alles auswählen

 
 
procedure TForm1.Button1Click(Sender: TObject);
 
var
    datum : TDateTime;
    s, wochentag: string;
    i,x : integer;
 
    begin
 
      x:=1;
      s := Edit1.Text;
 
 for i := 0 to 364 do begin
 
  datum := StrToDate('01.01.'+s);
  datum := datum + x;
  wochentag := LongDayNames[DayOfWeek(datum)];
 
   if (wochentag = 'Samstag') or (wochentag = 'Sonntag') then
   begin
   Memo1.Lines.Add('Wochenende' + #10#13);
   end
   else
   Memo1.Lines.Add('Werktag' + #10#13);
end;
 
 
 end;        
 
 

Das Problem ist nun: es steht nur 5 mal Werktag dar und das wars... :(

Ich denke, das liegt an der if-Anweisung, das geht wohl so nicht. Habt jemand ne Idee?
Besser mit case lösen?

Vielen Dank!
Zuletzt geändert von Lori am Mo 16. Feb 2015, 18:11, insgesamt 1-mal geändert.
Grund: richtiger Highlighter

wp_xyz
Beiträge: 5130
Registriert: Fr 8. Apr 2011, 09:01

Re: if oder case

Beitrag von wp_xyz »

Überleg mal, was passiert denn, wenn die Schleife durchläuft: Ändert sich da das Datum?

Komoluna
Beiträge: 565
Registriert: So 26. Aug 2012, 09:03
OS, Lazarus, FPC: Windows(10), Linux(Arch)
CPU-Target: 64Bit

Re: if oder case

Beitrag von Komoluna »

Hi, tausch doch mal folgende Zeilen:

Code: Alles auswählen

 for i := 0 to 364 do begin
 
  datum := StrToDate('01.01.'+s);
sonst setzt du bei jedem Schleifendurchlauf "datum" auf 1.1.xxxx und erhöhst das dann um 1...

P.S: mist, war nich schnell genug...

MFG

Komoluna
Programmer: A device to convert coffee into software.

Rekursion: siehe Rekursion.

Benutzeravatar
theo
Beiträge: 10857
Registriert: Mo 11. Sep 2006, 19:01

Re: if oder case

Beitrag von theo »

Die beiden haben recht.
Was ich auch noch ändern würde: Nicht über String gehen, wegen Ineffizienz und Sprachabhängigkeit, sondern "wochentag" als integer nehmen, wie von
DayOfWeek erhalten. http://lazarus-ccr.sourceforge.net/docs ... fweek.html

Code: Alles auswählen

....
     wochentag := DayOfWeek(datum);
 
    if (wochentag = 7) or (wochentag = 1) then
    begin
      Memo1.Lines.Add('Wochenende' + #10#13);
    end
    else
      Memo1.Lines.Add('Werktag' + #10#13);
  end;

gillian_x
Beiträge: 30
Registriert: Sa 22. Nov 2014, 14:24

Re: if oder case

Beitrag von gillian_x »

Danke! :)

Lag daran!

So, jetzt werden aber nur 31 Tage ausgegeben. :(

Denke mal es liegt daran, dass der Januar 31 Tage hat. Scheinbar springt der nicht in den nächsten Monat. :( kann das sein?

@theo: Danke, das werde ich mal so testen! :)

gillian_x
Beiträge: 30
Registriert: Sa 22. Nov 2014, 14:24

Re: if oder case

Beitrag von gillian_x »

Problem gelöst! :)

Musste MaxLength vom Memo auf 10.000 setzen und nun läuft es! :)

Denn Tip von Theo habe ich umgesetzt!

Vielen Dank! :)

Antworten