AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Prüfung ob Wochentag in der Zeit vorhanden

Ein Thema von loirad · begonnen am 7. Sep 2011 · letzter Beitrag vom 8. Sep 2011
Antwort Antwort
Seite 1 von 2  1 2   
loirad

Registriert seit: 25. Nov 2009
135 Beiträge
 
Delphi 6 Professional
 
#1

Prüfung ob Wochentag in der Zeit vorhanden

  Alt 7. Sep 2011, 20:20
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
Wer Fehler findet darf sie behalten!
  Mit Zitat antworten Zitat
r2c2

Registriert seit: 9. Mai 2005
Ort: Nordbaden
925 Beiträge
 
#2

AW: Prüfung ob Wochentag in der Zeit vorhanden

  Alt 7. Sep 2011, 20:35
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
Kaum macht man's richtig, schon klappts!
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.289 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Prüfung ob Wochentag in der Zeit vorhanden

  Alt 7. Sep 2011, 20:35
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.
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
loirad

Registriert seit: 25. Nov 2009
135 Beiträge
 
Delphi 6 Professional
 
#4

AW: Prüfung ob Wochentag in der Zeit vorhanden

  Alt 7. Sep 2011, 20:49
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
Wer Fehler findet darf sie behalten!
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.289 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: Prüfung ob Wochentag in der Zeit vorhanden

  Alt 7. Sep 2011, 21:00
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...
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
loirad

Registriert seit: 25. Nov 2009
135 Beiträge
 
Delphi 6 Professional
 
#6

AW: Prüfung ob Wochentag in der Zeit vorhanden

  Alt 7. Sep 2011, 21:05
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
Wer Fehler findet darf sie behalten!
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.289 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: Prüfung ob Wochentag in der Zeit vorhanden

  Alt 7. Sep 2011, 21:10
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.
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Bjoerk

Registriert seit: 28. Feb 2011
Ort: Mannheim
1.384 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: Prüfung ob Wochentag in der Zeit vorhanden

  Alt 7. Sep 2011, 21:51
Tag:= IncDay(Tag);
  Mit Zitat antworten Zitat
Darlo

Registriert seit: 28. Jul 2008
Ort: München
1.196 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#9

AW: Prüfung ob Wochentag in der Zeit vorhanden

  Alt 8. Sep 2011, 01:35
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
Philip
  Mit Zitat antworten Zitat
Darlo

Registriert seit: 28. Jul 2008
Ort: München
1.196 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#10

AW: Prüfung ob Wochentag in der Zeit vorhanden

  Alt 8. Sep 2011, 01:48
Tag:= IncDay(Tag);
Hab Deinen Post nicht richtig gelesen....
Hast ja bereits die Antwort gegeben gehabt.
Philip
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:27 Uhr.
Powered by vBulletin® Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf