Verwirrend [Erledigt]

Alle Fragen um die Programmierung, die sich sonst nicht kategorisieren lassen. Von Makro bis Codeblock, von IF bis ENDIF

Moderator: Moderatoren

Antworten
Benutzeravatar
Klaus Schuster
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 204
Registriert: Do, 24. Jan 2008 10:01
Wohnort: 90762 Fürth

Verwirrend [Erledigt]

Beitrag von Klaus Schuster » Sa, 25. Jan 2020 12:47

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
Zuletzt geändert von Klaus Schuster am Sa, 25. Jan 2020 14:03, insgesamt 1-mal geändert.
Gruß Klaus

georg
Foren-Administrator
Foren-Administrator
Beiträge: 2591
Registriert: Fr, 08. Feb 2008 21:29

Re: Verwirrend

Beitrag von georg » Sa, 25. Jan 2020 12:49

Hallo, Klaus -


hast Du Dir mal im Debugger angesehen?
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.

Benutzeravatar
Klaus Schuster
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 204
Registriert: Do, 24. Jan 2008 10:01
Wohnort: 90762 Fürth

Re: Verwirrend

Beitrag von Klaus Schuster » Sa, 25. Jan 2020 12:53

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.
Gruß Klaus

georg
Foren-Administrator
Foren-Administrator
Beiträge: 2591
Registriert: Fr, 08. Feb 2008 21:29

Re: Verwirrend

Beitrag von georg » Sa, 25. Jan 2020 12:57

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.
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.

Benutzeravatar
Klaus Schuster
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 204
Registriert: Do, 24. Jan 2008 10:01
Wohnort: 90762 Fürth

Re: Verwirrend [Erledigt]

Beitrag von Klaus Schuster » Sa, 25. Jan 2020 13:06

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!
Gruß Klaus

Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15042
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Kontaktdaten:

Re: Verwirrend [Erledigt]

Beitrag von brandelh » Sa, 25. Jan 2020 15:47

Wenn man eine Funktion dafür baut, statt einer define oder translate, kann man das im Debugger viel leichter durchtesten ;-)
Gruß
Hubert

Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12286
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg

Re: Verwirrend [Erledigt]

Beitrag von AUGE_OHR » Mi, 29. Jan 2020 9:20

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
gruss by OHR
Jimmy

Benutzeravatar
Klaus Schuster
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 204
Registriert: Do, 24. Jan 2008 10:01
Wohnort: 90762 Fürth

Re: Verwirrend [Erledigt]

Beitrag von Klaus Schuster » Mi, 29. Jan 2020 14:51

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.
Gruß Klaus

Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 7914
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Kontaktdaten:

Re: Verwirrend [Erledigt]

Beitrag von Tom » Mi, 29. Jan 2020 15:05

Doch, TimeToSec() - in den Tools. Du musst nur das Ergebnis durch 60 teilen.
Herzlich,
Tom

Benutzeravatar
Klaus Schuster
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 204
Registriert: Do, 24. Jan 2008 10:01
Wohnort: 90762 Fürth

Re: Verwirrend [Erledigt]

Beitrag von Klaus Schuster » Mi, 29. Jan 2020 15:38

Jupp Ton, das macht den Code eleganter (und leichter zu lesen).
Gruß Klaus

Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 7914
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Kontaktdaten:

Re: Verwirrend [Erledigt]

Beitrag von Tom » Mi, 29. Jan 2020 15:44

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.
Herzlich,
Tom

Benutzeravatar
Klaus Schuster
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 204
Registriert: Do, 24. Jan 2008 10:01
Wohnort: 90762 Fürth

Re: Verwirrend [Erledigt]

Beitrag von Klaus Schuster » Mi, 29. Jan 2020 16:23

... originell.: Das nehme ich als Kompliment, Tom (sorry für den Schreibfehler in der letzten Antwort). Jugend forscht.
Gruß Klaus

Antworten