Seite 1 von 1

Verwirrend [Erledigt]

Verfasst: Sa, 25. Jan 2020 12:47
von Klaus Schuster
Hi Folks,

kann sich jemand erklären warum in der letzten Zeile 119 rauskommt?

Code: Alles auswählen

#xtranslate Stunden2Minuten( <val> )  => ( Val( Left( <val>, 2 )) * 60 ) + Val( Right( <val>, 2 ))

PROCEDURE Main

   LOCAL nDauer := 0
   altd()

   nDauer := Stunden2Minuten( '2359' )          // >> 1439 ok
   nDauer := 1440 - nDauer                      // >> 1 ok
   nDauer := 1440 - Stunden2Minuten( '2359' )   // >> 119 ?

RETURN

Re: Verwirrend

Verfasst: Sa, 25. Jan 2020 12:49
von georg
Hallo, Klaus -


hast Du Dir mal im Debugger angesehen?

Re: Verwirrend

Verfasst: Sa, 25. Jan 2020 12:53
von Klaus Schuster
Hallo Georg,

Code: Alles auswählen

Stunden2Minuten( <val> )  => ( Val( Left( <val>, 2 )) * 60 ) + Val( Right( <val>, 2 ))
nimmt die Anzahl an Stunden (23) und multipliziert diese mit 60 = 1380 und addiert die Minuten (59) dazu > 1439 Minuten. Oder versteh ich Dich falsch?
Ja, im Debugger ist alles identisch.

Re: Verwirrend

Verfasst: Sa, 25. Jan 2020 12:57
von georg
Hallo, Klaus -


erstelle mal eine .ppo-Datei und schaue Dir diese an:

Code: Alles auswählen

   nDauer := 1440 - ( Val( Left( '2359', 2 )) * 60 ) + Val( Right( '2359', 2 ))   
Ich vermute, dass hier das Problem liegt.

Mit diesem Code:

Code: Alles auswählen

#xtranslate Stunden2Minuten( <val> )  => (( Val( Left( <val>, 2 )) * 60 ) + Val( Right( <val>, 2 )))
funktioniert ist. Punkt vor Strich ist es nicht (hatte ich zuerst vermutet), aber Du willst zwei Werte subtrahieren, durch die Formel wird dann aber eine Subtraktion und eine Addition daraus.

Re: Verwirrend [Erledigt]

Verfasst: Sa, 25. Jan 2020 13:06
von Klaus Schuster
Danke Georg,

in der PPO sieht man es:

alt
nDauer := 1440 - ( Val( Left( '2359', 2 )) * 60 ) + Val( Right( '2359', 2 ))

Dein Vorschlag:
nDauer := 1440 - (( Val( Left( '2359', 2 )) * 60 ) + Val( Right( '2359', 2 )))

Wieder etwas gelernt!

Re: Verwirrend [Erledigt]

Verfasst: Sa, 25. Jan 2020 15:47
von brandelh
Wenn man eine Funktion dafür baut, statt einer define oder translate, kann man das im Debugger viel leichter durchtesten ;-)

Re: Verwirrend [Erledigt]

Verfasst: Mi, 29. Jan 2020 9:20
von AUGE_OHR
hi,

mir ist klar das es um die Syntax der xtranslate Function geht ...
aber warum brauchst du die wenn xBase solche TIME Function wie ElapTime() hat :?:

Code: Alles auswählen

c:\ALASKA\XPPW32\Source\COMPAT\compat87.prg

Re: Verwirrend [Erledigt]

Verfasst: Mi, 29. Jan 2020 14:51
von Klaus Schuster
Hi Jimmy,

ElapTime ist nicht das, was ich brauche. Ich möchte einen String 'HHMM' in Minuten umrechnen. In der Compat87.prg findet sich keine derartige Funktion.

Re: Verwirrend [Erledigt]

Verfasst: Mi, 29. Jan 2020 15:05
von Tom
Doch, TimeToSec() - in den Tools. Du musst nur das Ergebnis durch 60 teilen.

Re: Verwirrend [Erledigt]

Verfasst: Mi, 29. Jan 2020 15:38
von Klaus Schuster
Jupp Ton, das macht den Code eleganter (und leichter zu lesen).

Re: Verwirrend [Erledigt]

Verfasst: Mi, 29. Jan 2020 15:44
von Tom
Der Ansatz, das über xtranslate oder xcommand zu machen, ist sowieso ... originell. Normalerweise würde man dafür einfach eine Funktion "Stunden2Minuten()" schreiben, fertig. In dem Fall hätte man das Klammerungsproblem auch nicht gehabt.

Re: Verwirrend [Erledigt]

Verfasst: Mi, 29. Jan 2020 16:23
von Klaus Schuster
... originell.: Das nehme ich als Kompliment, Tom (sorry für den Schreibfehler in der letzten Antwort). Jugend forscht.