Einzelnen Beitrag anzeigen

SirTwist

Registriert seit: 28. Sep 2006
196 Beiträge
 
Delphi XE Professional
 
#2

Re: Zeitenberechnungs-Unit, bitte um Tests

  Alt 30. Mai 2007, 12:14
Hallo BingoBongo,

eine schöne Sourcecode-Orgie hast Du da erzeugt Um ehrlich zu sein, wird mir nicht klar, welche Werte diese Dezimalzahlen annehmen können. Also wenn Du schreibst
Zitat:
function decintime5: wandelt eine Dezimalzahl in eine Zeit der Form 23:56 um und gibt sie als String zurück
was ist dann mit "eine Dezimalzahl" gemeint? wird 23,5 zu "23:30:00"? oder wird 23,5 zu "00:23:30"?

Um ehrlich zu sein, reicht dafür folgender Fünfzeiler aus:
Delphi-Quellcode:
var h, m, s: Integer;
   zeit: TTime;
begin
  h := Trunc(indec);
  m := Trunc(Frac(indec) * 60);
  s := Trunc(Frac(indec) * 3600) mod 60;
  zeit := EncodeTime(h, m, s);
  result := FormatDateTime('hh:nn:ss', zeit);
exit;
(runtergetippert, ungetestet).

Deine erste Funktion timestring() hat 30 Übergabeparameter ohne Default-Wert, d.h. man muss wirklich bei jedem Aufruf alle 30 Parameter angeben. Wenn man schon so eine Funktion braucht, dann wäre es sinniger, die Parameter als offenes Array angeben zu können:
Delphi-Quellcode:
function AddTimes(arr: array of String): String;
var i: Integer;
   zeit: Double;
begin
  zeit := 0;
  for i:=Low(arr) to High(arr) do
    zeit := zeit + StrToFloat(arr[i]);
  result := decintime8(zeit);
end;
Der Aufruf erfolgt dann mit AddTimes(["1,5", "2,5", "3,5"]);

In der Funktion decodetime verwendest du einen konstanten String ziffern und testest, ob ein einzelnes Zeichen Deiner Eingabe in diesem String enthalten ist. Schöner wäre es, Ziffern als Menge von Chars zu definieren (ziffern = ['0'..'9']; ) und dann mit "if timestring[i] in ziffern then..." zu testen. Ich weiß zwar nicht, ob das performanter ist, aber es sieht im Quellcode schöner aus

Anstelle von result:= hour * H + minute * M + sekunde * S; solltest Du besser result := EncodeTime(hour, minute, sekunde); verwenden, da dies genau die dafür vorgesehene Funktion ist.

So, ich hoffe, das hilft Dir ein wenig.
  Mit Zitat antworten Zitat