Seite 1 von 1

Überprüfung von picture einer Variable

Verfasst: Mi, 28. Nov 2007 12:08
von stevie
Kann man eigentlich eine Variable auf ein bestimmtes Format (picture) überprüfen?
Bsp: var1=1.5 oder
var1=+0.45E +00
Jetzt die Prüfung, ob die Variable im Format 9.9 oder im Format #9.99E #99 vorliegt und dann entsprechende Enscheidung, ob umgewandelt werden muss oder nicht.

Verfasst: Mi, 28. Nov 2007 12:44
von brandelh
Also intern in der Variable ist entweder eine 32 Bit Integer oder eine Fließkommazahl gespeichert (Pablo hat dazu was geschrieben im DevCon Ordner).

Wenn man einfach (aus dem Gedächtnis)

Code: Alles auswählen

nVar1 := 1234
nVar2 := 1234.0
? nVar1 -> 1234
? nVar2 -> 1234.00
aufruft sieht man die Darstellungsunterschiede.
Der interne Wert ist unabhängig von der Darstellung, ab einer gewissen Größe kann die Fließkommazahl aber nicht mehr genau dargestellt werden, sondern nur noch als Vielfaches einer 10er Potenz.

Verfasst: Mi, 28. Nov 2007 15:34
von stevie
brandelh hat geschrieben:Also intern in der Variable ist entweder eine 32 Bit Integer oder eine Fließkommazahl gespeichert (Pablo hat dazu was geschrieben im DevCon Ordner).

Wenn man einfach (aus dem Gedächtnis)

Code: Alles auswählen

nVar1 := 1234
nVar2 := 1234.0
? nVar1 -> 1234
? nVar2 -> 1234.00
aufruft sieht man die Darstellungsunterschiede.
Der interne Wert ist unabhängig von der Darstellung, ab einer gewissen Größe kann die Fließkommazahl aber nicht mehr genau dargestellt werden, sondern nur noch als Vielfaches einer 10er Potenz.
du hast mich nicht richtig verstanden. Also in Variable, die Zeichen enthält (Typ C) ist entweder eine Fließkommazahl oder Exponentialzahl gespeichert. Und jetzt soll halt genau danach ausgewählt werden.
Es geht nämlich darum: Ich habe ein Eingabefeld (picture #9.9999E#99) in dem Exponentialwerte eingegeben werden. Es gibt über 1000 Datensätze, die damit bearbeitet werden können. Einmal alle 12, 13, 14 oder Felder soll das Feld eine Fließkommazahl enthalten (picture 999). Da dieses Feld zur Berechnung genutzt wird, aber auch alle anderen, kommt es vor das in einer Aufgabe plötzlich 100+"+1.464E01" drinsteht, was logischerweise fehlschlägt. Daher möchte ich halt am Variableninhalt unterscheiden, ob ein Ersatzwert benutzt werden muss oder nicht.

Verfasst: Mi, 28. Nov 2007 15:47
von Martin Altmann
Nun,
dann kannst Du doch ganz einfach nach einem E in der Zeichenkette greppen....

Viele Grüße,
Martin

Verfasst: Mi, 28. Nov 2007 16:45
von dirk
So wie Martin es schon angedeutet hat, nach dem "E" suchen und darüber die Berechnung starten.
Beispielcode:
[code]LOCAL aDaten:={"1.5", "+0.45E+00", "+0.45E+02", "-1000E-03"}
LOCAL i:=0

FOR i:=1 to len(aDaten)
IF "E"$aDaten[i]
nVar1:=val(substr(aDaten[i],1,;
at("E", aDaten[i])-1));
*10**val(substr(aDaten[i],at("E", aDaten[i])+1))
ELSE
nVar1:=val(aDaten[i])
ENDIF
? aDaten[i], nVar1
NEXT[/code]

Verfasst: Mi, 28. Nov 2007 16:50
von dirk
Leider hat das mit dem markieren des Codestextes an anschließendem Klick auf den Code nicht funktioniert.
Ich vermute ich muß das Häkchen, das bei "BBCode in diesem Beitrag deaktivieren" gesetzt war, herausnehmen, oder ?
Hier der Test:

Code: Alles auswählen

   LOCAL aDaten:={"1.5", "+0.45E+00", "+0.45E+02", "-1000E-03"}
   LOCAL i:=0

   FOR i:=1 to len(aDaten)
      IF "E"$aDaten[i]
         nVar1:=val(substr(aDaten[i],1,at("E", aDaten[i])-1))*10**val(substr(aDaten[i],at("E", aDaten[i])+1))
      ELSE
         nVar1:=val(aDaten[i])
      ENDIF
      ? aDaten[i], nVar1
   NEXT
Ja, jetzt hat es funktioniert ! Wozu ist man sonst auch Rookie ?
Ich hoffe, es hilft weiter.
dirk

Verfasst: Mi, 28. Nov 2007 17:02
von brandelh
dirk hat geschrieben:...
Ich vermute ich muß das Häkchen, das bei "BBCode in diesem Beitrag deaktivieren" gesetzt war, herausnehmen, oder ?
...
Ja, jetzt hat es funktioniert ! Wozu ist man sonst auch Rookie ?
...
oben rechts ist in den eigenen Messages [EDIT] als Schaltfläche zu sehen.
Wenn du da drauf wärst, hättest du die ursprüngliche Message ändern können und niemand hätte es mitbekommen (solange es die letzte Meldung ist, sonst erscheint ein Hinweis).

Verfasst: Mi, 28. Nov 2007 17:48
von dirk
Vielen Dank Hubert !
das hatte ich noch nicht entdeckt.

dirk