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
Foren-Administrator
Foren-Administrator
Beiträge: 367
Registriert: Do, 24. Jan 2008 10:01
Wohnort: 90762 Fürth
Hat sich bedankt: 9 Mal
Danksagung erhalten: 9 Mal

Verwirrend [Erledigt]

Beitrag 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
Zuletzt geändert von Klaus Schuster am Sa, 25. Jan 2020 14:03, insgesamt 1-mal geändert.
Gruß Klaus
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2824
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

Re: Verwirrend

Beitrag von georg »

Hallo, Klaus -


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

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Benutzeravatar
Klaus Schuster
Foren-Administrator
Foren-Administrator
Beiträge: 367
Registriert: Do, 24. Jan 2008 10:01
Wohnort: 90762 Fürth
Hat sich bedankt: 9 Mal
Danksagung erhalten: 9 Mal

Re: Verwirrend

Beitrag 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.
Gruß Klaus
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2824
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

Re: Verwirrend

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

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Benutzeravatar
Klaus Schuster
Foren-Administrator
Foren-Administrator
Beiträge: 367
Registriert: Do, 24. Jan 2008 10:01
Wohnort: 90762 Fürth
Hat sich bedankt: 9 Mal
Danksagung erhalten: 9 Mal

Re: Verwirrend [Erledigt]

Beitrag 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!
Gruß Klaus
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Verwirrend [Erledigt]

Beitrag von brandelh »

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: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Re: Verwirrend [Erledigt]

Beitrag 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
gruss by OHR
Jimmy
Benutzeravatar
Klaus Schuster
Foren-Administrator
Foren-Administrator
Beiträge: 367
Registriert: Do, 24. Jan 2008 10:01
Wohnort: 90762 Fürth
Hat sich bedankt: 9 Mal
Danksagung erhalten: 9 Mal

Re: Verwirrend [Erledigt]

Beitrag 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.
Gruß Klaus
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9357
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 101 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Re: Verwirrend [Erledigt]

Beitrag von Tom »

Doch, TimeToSec() - in den Tools. Du musst nur das Ergebnis durch 60 teilen.
Herzlich,
Tom
Benutzeravatar
Klaus Schuster
Foren-Administrator
Foren-Administrator
Beiträge: 367
Registriert: Do, 24. Jan 2008 10:01
Wohnort: 90762 Fürth
Hat sich bedankt: 9 Mal
Danksagung erhalten: 9 Mal

Re: Verwirrend [Erledigt]

Beitrag von Klaus Schuster »

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: 9357
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 101 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Re: Verwirrend [Erledigt]

Beitrag 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.
Herzlich,
Tom
Benutzeravatar
Klaus Schuster
Foren-Administrator
Foren-Administrator
Beiträge: 367
Registriert: Do, 24. Jan 2008 10:01
Wohnort: 90762 Fürth
Hat sich bedankt: 9 Mal
Danksagung erhalten: 9 Mal

Re: Verwirrend [Erledigt]

Beitrag von Klaus Schuster »

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