Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Delphi Prüfung ob Wochentag in der Zeit vorhanden (https://www.delphipraxis.net/162860-pruefung-ob-wochentag-der-zeit-vorhanden.html)

loirad 7. Sep 2011 19:20

Prüfung ob Wochentag in der Zeit vorhanden
 
Hallo liebe Delphi-PRAXIS'ler,

ich habe ein Problem wo ich einfach nicht hintersteige:

Code:
repeat
 incDay(Tag);
 if DayOfWeek(Tag)=6 then Tage.Items.Add(Datetostr(Tag));
until Tag=Now;
Das Problem ist, dass sich das Programm aufhängt und nichts tut :!:
Zur Erklärung:
Tag:TDateTime;
Tage: TCheckListBox;

Liebe Grüße
loirad

r2c2 7. Sep 2011 19:35

AW: Prüfung ob Wochentag in der Zeit vorhanden
 
Die Wahrscheinlichkeit, dass Tag=Now zutrifft, ist sehr gering. Dafür müsstest du exakt die richtige Millisekunde erwischen. ==> http://docwiki.embarcadero.com/VCL/d...tils.IsSameDay

mfg

Christian

stahli 7. Sep 2011 19:35

AW: Prüfung ob Wochentag in der Zeit vorhanden
 
Das Programm tut schon etwas. Es läuft immer weiter in der Schleife ;-)

Abgesehen davon, dass man nicht sieht, was Du "Tag" zuvor zugewiesen hast, solltest Du auf Tag >= Now prüfen.
TDateTime ist außerdem ein Realwert. Im ganzzahligen Teil ist der Tag und in den Nachkommastellen die Uhrzeit gespeichert.

Vielleicht ist es grundsätzlich sinnvoller, direkt mit TDate zu arbeiten.

loirad 7. Sep 2011 19:49

AW: Prüfung ob Wochentag in der Zeit vorhanden
 
Vielen Dank für die Tipps!!!
Leider funktioniert es immernoch nicht. Anbei der gesamte Quelltext:
Code:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, CheckLst,DateUtils;

type
  TForm1 = class(TForm)
    Tage: TCheckListBox;
    Einlesen: TMemo;
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure TageClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Tage.Items.SaveToFile('Tage.txt');
Einlesen.Clear;
Einlesen.Lines.Add(Datetostr(Now));
Einlesen.Lines.SaveToFile('Tag.txt');
end;

procedure TForm1.TageClick(Sender: TObject);
begin
Tage.Items.Delete(Tage.ItemIndex);
end;



procedure TForm1.FormCreate(Sender: TObject);
var i:integer;Tag:TDate;
begin
Einlesen.Lines.LoadFromFile('Tag.txt');
Tage.Items.LoadFromFile('Tage.txt');
for i:=0 to Tage.Items.Count-1 do
 if Tage.Items.Strings[i]='' then Tage.Items.Delete(i);
Tag:=strtoDate(Einlesen.Lines[0]);
repeat
 incDay(Tag);
 if DayOfWeek(Tag)=6 then Tage.Items.Add(Datetostr(Tag));
until Tag>=Now;
end;


end.
Das einlesen ist eleganter zu lösen - ich weiß, aber es tut hier seinen Zweck :!:

stahli 7. Sep 2011 20:00

AW: Prüfung ob Wochentag in der Zeit vorhanden
 
Delphi-Quellcode:
for i:=0 to Tage.Items.Count-1 do
  if Tage.Items.Strings[i]='' then Tage.Items.Delete(i);
Die Schleife solltest Du rückwärts laufen lassen, da Du sonst 2 aufeinander folgende Leerzeilen nicht erkennst.

Ansonsten:
Was funktioniert denn nicht?
Setze mal einen Haltepunkt, debugge schrittweise und untersuche Deine Variablen. Das sollte helfen...

loirad 7. Sep 2011 20:05

AW: Prüfung ob Wochentag in der Zeit vorhanden
 
Hinweis gleich eingearbeitet!
Für Now bekomme ich beim debuggen nur:"Nicht verfügbarer Wert" und für Tag nur so eine komische Zahl (vermutlich integer Wert für das Datum)!
Sonst fällt mir nichts auf :pale:

stahli 7. Sep 2011 20:10

AW: Prüfung ob Wochentag in der Zeit vorhanden
 
Welches Delphi hast Du?
Kannst Du bei den Überwachten Ausdrücken "Funktionen zulassen"? Dann wird die Funktion ausgeführt und das Ergebnis im Debuger angetzeigt.
Ansonsten nutze eine lokale Variable, der Du "Now" zuweist. Die Variable lässt sich dann auf jeden Fall auslesen.

Bjoerk 7. Sep 2011 20:51

AW: Prüfung ob Wochentag in der Zeit vorhanden
 
Tag:= IncDay(Tag);

Darlo 8. Sep 2011 00:35

AW: Prüfung ob Wochentag in der Zeit vorhanden
 
Hi,

der Variablename "tag" ist ziemlich unglücklich da TComponent."tag" bereits vergeben ist. Ggf. löst das schon Dein Problem, ansonsten schau Dir folgendes mal an (schon auf Deinen Code modifiziert, die until-Anweisung hat hier nicht wirklich einen Sinn....):
Delphi-Quellcode:
var
  startDate, myIncDate: TDate;
  i: integer;
begin
//Finde das Datum des nächsten Sonntags
i := 1;
startDate := now;
repeat
  myIncDate := incDay(startDate,i);
  if DayOfWeek(myIncDate) = 7 then showmessage('Nächster Sonntag am: '+Datetostr(myIncDate+1));
  i := i+1;
 until (DayOfWeek(myIncDate)=DayOfWeek(Now));
Gruß Darlo

Darlo 8. Sep 2011 00:48

AW: Prüfung ob Wochentag in der Zeit vorhanden
 
Zitat:

Zitat von Bjoerk (Beitrag 1122500)
Tag:= IncDay(Tag);

Hab Deinen Post nicht richtig gelesen....
Hast ja bereits die Antwort gegeben gehabt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:57 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz