AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Kompliziertes Problem mit Wochentagberechnung
Thema durchsuchen
Ansicht
Themen-Optionen

Kompliziertes Problem mit Wochentagberechnung

Ein Thema von Glados · begonnen am 28. Aug 2017 · letzter Beitrag vom 29. Aug 2017
Antwort Antwort
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.583 Beiträge
 
Delphi 12 Athens
 
#1

AW: Kompliziertes Problem mit Wochentagberechnung

  Alt 29. Aug 2017, 00:37
Du willst den "nächsten" Tag, also exclusive dem Aktuellen/Übergebenen.
Da muß die Schleife mindestens einmal durchlaufen werden, also prüft man am Ende (repeat-until)
soll inkl. des Aktuellen/Übergebenen auswertet werden, dann vor der Schleife prüfen (while-do).

Und scheinbar hast du die Hilfe nicht gesehn?
GetDayOfWeek = DayOfTheWeak
Zitat:
DayOfTheWeek is ISO 8601 compliant
Warum ist aExcludeDays ein TArray<string> anstatt einem TArray<Boolean>, wobei da ein SET-OF-WeekDays eventuell verständlicher ist.
siehe TDayOfWeekSet ... aber eventuell auch als 1..7, je nach Datenformat
PS: Für die "unverständlichen" Zahlen gibt es auch Wochentagskonstanten, die man verwenden darf.

Und wieso muß DayOfWeek an die Funktion übergeben werden, wenn du auch den Startwert aus StartTimestamp rausholen kannst?

PS: Eine Fehlerprüfung (z.B. Assert) am Anfang wäre nicht schlecht, falls jemand auf die Idee kommt und alle Tage verbietet. -> Endlosschleife
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (29. Aug 2017 um 09:54 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von TigerLilly
TigerLilly

Registriert seit: 24. Mai 2017
Ort: Wien, Österreich
1.251 Beiträge
 
Delphi 12 Athens
 
#2

AW: Kompliziertes Problem mit Wochentagberechnung

  Alt 29. Aug 2017, 07:31
>while True do

So was ist immer ein repeat/until.
  Mit Zitat antworten Zitat
Glados
(Gast)

n/a Beiträge
 
#3

AW: Kompliziertes Problem mit Wochentagberechnung

  Alt 29. Aug 2017, 12:39
Zitat:
Warum ist aExcludeDays ein TArray<string> anstatt einem TArray<Boolean>, wobei da ein SET-OF-WeekDays eventuell verständlicher ist.
Weil der Datendsatz 0, -1, -1, -1, -1, -1, -1 aus einer Textdatei kommt.
Diesen lese ich mit Ini ReadString, das Resultat packe ich in ein Array und übergebe es der Funktion.

In ein Set würde ich meine Auswahl folgendermaßen speichern
Delphi-Quellcode:
for i := 0 to 6 do
 begin
  aCheckBox := (FindComponent('cbDay' + IntToStr(i)) as TCheckBox);

  if Assigned(aCheckBox) and aCheckBox.Checked then
   aDayOfWeekSet := aDayOfWeekSet + [aCheckBox.Tag];
 end;
Nur wie soll man so etwas in eine Datei abspeichern?

Geändert von Glados (29. Aug 2017 um 12:58 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.782 Beiträge
 
Delphi 12 Athens
 
#4

AW: Kompliziertes Problem mit Wochentagberechnung

  Alt 29. Aug 2017, 13:08
Nur wie soll man so etwas in eine Datei abspeichern?
Da in diesem Set gerade mal 7 Bits belegt sind, würde ein Cast auf bzw. von Byte reichen.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Glados
(Gast)

n/a Beiträge
 
#5

AW: Kompliziertes Problem mit Wochentagberechnung

  Alt 29. Aug 2017, 13:31
Ok speichern so
IniS.WriteInteger(section, ident, Byte(aDayOfWeekSet)); Das funktioniert soweit.

Mit dem Laden tue ich mich aber noch schwer
Delphi-Quellcode:
var
 exclude: TDayOfWeekSet;
begin
 exclude := TDayOfWeekSet(Byte(IniS.ReadInteger(section, ident, 0))); // in der Ini steht 8/Mittwoch

 // cdDay2 = Mittwoch
 cbDay2.Checked := 8 in exclude;
end;
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.782 Beiträge
 
Delphi 12 Athens
 
#6

AW: Kompliziertes Problem mit Wochentagberechnung

  Alt 29. Aug 2017, 13:47
Ok speichern so
IniS.WriteInteger(section, ident, Byte(aDayOfWeekSet)); Das funktioniert soweit.

Mit dem Laden tue ich mich aber noch schwer
Dann vielleicht so:
  Byte(exclude) := IniS.ReadInteger(section, ident, 0);
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Glados
(Gast)

n/a Beiträge
 
#7

AW: Kompliziertes Problem mit Wochentagberechnung

  Alt 29. Aug 2017, 13:52
Ok das wusste ich nicht. Ich dachte das Casten beim Auslesen + das "in" würden reichen.
Mh das funktioniert auch nicht, obwohl Byte(exclude) nun "8" entspricht.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.782 Beiträge
 
Delphi 12 Athens
 
#8

AW: Kompliziertes Problem mit Wochentagberechnung

  Alt 29. Aug 2017, 13:52
Oder ganz komfortabel mit einem Record Helper:
Delphi-Quellcode:
  TDayOfWeekSetHelper = record helper for TDayOfWeekSet
    function GetAsInteger: Integer;
    procedure SetAsInteger(const Value: Integer);
    property AsInteger: Integer read GetAsInteger write SetAsInteger;
  end;

function TDayOfWeekSetHelper.GetAsInteger: Integer;
begin
  Result := Byte(Self);
end;

procedure TDayOfWeekSetHelper.SetAsInteger(const Value: Integer);
begin
  Byte(Self) := Value;
end;

...
  IniS.WriteInteger(section, ident, aDayOfWeekSet.AsInteger);
...
  exclude.AsInteger := IniS.ReadInteger(section, ident, 0);
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.583 Beiträge
 
Delphi 12 Athens
 
#9

AW: Kompliziertes Problem mit Wochentagberechnung

  Alt 29. Aug 2017, 16:27
Wenn man das als SET mit "Namen" deklariert hat, könnte man auch über die TypeInfo oder RTTI das SET von/in einen String umwandeln.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Antwort Antwort


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:58 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz