CC: EVALUATE vs FORMAT

10. November 2010 00:04

Also, dank Forensuche hab ich rausgefunden, dass EVALUATE das Gegenteil von FORMAT ist:
viewtopic.php?f=36&t=8271&p=39762&hilit=EVALUATE#p39762

Format castet jeden Datentyp nach Text.
Evaluate castet jeden Datentyp nach Integer?

Wenn das wahr ist, was ist der Sinn von diesem Codeabschnitt, den ich gerade in einem Report lese und zu verstehen versuche:

Code:

ExcelBuf.SETRANGE("Row No.",Number);
IF ExcelBuf.FIND('-') THEN
  REPEAT
    CASE ExcelBuf."Column No." OF
      1: EVALUATE(DebNo,ExcelBuf."Cell Value as Text");
      2: EVALUATE(Preisgruppe,ExcelBuf."Cell Value as Text");
      3: EVALUATE(Name,ExcelBuf."Cell Value as Text");
.....


Zeile 3: warum soll per EVALUATE von Text nach Integer gecastet werden?
DebNo (Code20), Preisgruppe (Code30) und Name (Text100) sind als globale Variablen definiert.

Oder hat EVALUATE auch eine andere Bedeutung?

Ich versuche grad den Code eines 50.000er Reports zu verstehen, der Debitorstammdaten von Excel nach NAV importiert.

Re: CC: EVALUATE vs FORMAT

10. November 2010 00:21

Hallo Lord_British,

ja, man kann sagen, dass EVALUATE das Gegenteil von FORMAT darstellt.
FORMAT wandelt (fast) jeden Datentyp in einen Text um,
jedoch
EVALUATE wandelt (sofern möglich) einen Text in den entsprechenden Zieldatentyp um.

Binary und BLOB lassen sich nicht per FORMAT in Text wandeln.

Übergibst du also einen Text, der ein gültiges Datumsformat darstellt an eine Date-Variable, dann wird Text in Date gewandelt,
übergibst du einen Text, der einen gültigen Dezimalwert darstellt an eine Dezimal-Variable, dann wird Text in Dezimal gewandelt,
übergibst du [...]
Übergibst du einen Text, der nicht in einem zum Zieldatentyp passenden Format geschrieben ist, liefert EVALUATE den Rückgabewert FALSE, daher sollte man diesen Befehl immer mit IF abfragen:
IF EVALUATE(Zielvariable, Quelltextvariable) THEN ...

In deinem Beispiel wird also der Text in
1. Code
2. Code
3. Text
gewandelt.

Meiner Meinung nach wären alle drei EVALUATE-Befehle in dem genannten Beispiel überflüssig, da Text und Code auch ohne EVALUATE gegenseitig zugewiesen werden können.
Text := Code;
funktioniert genauso gut wie
Code := Text;

Genauso würde auch die Zuweisung Option <-> Integer funktionieren:
Option := Integer;
funktioniert genauso wie
Integer := Option;

Re: CC: EVALUATE vs FORMAT

10. November 2010 09:51

Timo Lässer hat geschrieben:Hallo Lord_British,

ja, man kann sagen, dass EVALUATE das Gegenteil von FORMAT darstellt.
FORMAT wandelt (fast) jeden Datentyp in einen Text um,
jedoch
EVALUATE wandelt (sofern möglich) einen Text in den entsprechenden Zieldatentyp um.

Binary und BLOB lassen sich nicht per FORMAT in Text wandeln.

Übergibst du also einen Text, der ein gültiges Datumsformat darstellt an eine Date-Variable, dann wird Text in Date gewandelt,
übergibst du einen Text, der einen gültigen Dezimalwert darstellt an eine Dezimal-Variable, dann wird Text in Dezimal gewandelt,
übergibst du [...]
Übergibst du einen Text, der nicht in einem zum Zieldatentyp passenden Format geschrieben ist, liefert EVALUATE den Rückgabewert FALSE, daher sollte man diesen Befehl immer mit IF abfragen:
IF EVALUATE(Zielvariable, Quelltextvariable) THEN ...

In deinem Beispiel wird also der Text in
1. Code
2. Code
3. Text
gewandelt.

Meiner Meinung nach wären alle drei EVALUATE-Befehle in dem genannten Beispiel überflüssig, da Text und Code auch ohne EVALUATE gegenseitig zugewiesen werden können.
Text := Code;
funktioniert genauso gut wie
Code := Text;

Genauso würde auch die Zuweisung Option <-> Integer funktionieren:
Option := Integer;
funktioniert genauso wie
Integer := Option;


Danke Timo!
Damit bestätigst du nur, was ich schon vermutet hatte.
Es ist übrigens fremder Code, geschrieben von jemand anders und ich hab die undankbare Aufgabe darin durchzusteigen.