Syntax:
LPVOID LlExprParse(HLLJOB hJob, LPCTSTR lpExprText, BOOL bTableFields);
Aufgabe:
Testet den Ausdruck auf Korrektheit und erstellt eine interne Datenstruktur für diesen Ausdruck.
Parameter:
hJob: List & Label-Job-Handle
lpExprText: Ausdruck
bTableFields: TRUE: Bezug auf Felder (und Variablen), FALSE: Bezug nur auf Variablen
Rückgabewert:
Zeiger auf List & Label interne Datenstruktur
Hinweise:
Wenn ein Fehler zurückgemeldet wird (Adresse = NULL), kann man über LlExprError() die Fehlerbeschreibung abgefragt werden.
Die über LlDefineVariable() definierten Variablen können mit in den Ausdruck eingebaut werden, wenn bTableFields auf FALSE ist, ansonsten werden die über LlDefineField() definierten Felder in den Ausdruck mit einbezogen.
Wenn der Ausdruck mehrmals benötigt wird, empfiehlt es sich, diesen einmal über LlExprParse() übersetzen zu lassen und dann die Berechnungen durchzuführen und erst am Schluss den Baum wieder freizugeben.
Wenn beim Aufruf dieser Funktionen ein Fehler im Ausdruck erkannt wird, wird der entsprechende Fehler-Callback LL_NTFY_EXPRERROR aufgerufen.
Beispiel:
LPVOID lpExpr;
char
lpszErrortext[128];
char
lpszBuf[20];
long
lDateOne;
long
lDateTwo;
LlDefineVariable(hJob, "Datum", "29.2.1964",
LL_TEXT);
lpExpr = LlExprParse(hJob, "DateToJulian(DATE(Datum))",
FALSE);
if (lpExpr)
{
if (LlExprType(hJob,
lpExpr) != LL_EXPRTYPE_DOUBLE)
{
// da stimmt was nicht, muss numerisch
sein!
}
LlExprEvaluate(hJob, lpExpr,
lpszBuf, sizeof(lpszBuf));
lDateOne =
atol(lpszBuf);
// lDateOne hat nun das julianische Datum vom
29.2.1964
LlDefineVariable(hJob, "Datum", "28.10.2017",
LL_TEXT);
LlExprEvaluate(hJob, lpExpr, lpszBuf,
sizeof(lpszBuf));
lDateTwo = atol(lpszBuf);
//
lDateTwo hat nun das julianische Datum vom 28.10.2017
LlExprFree(hJob, LpExpr);
}
else
{
//
Fehler!
LlExprError(hJob, lpszErrortext,
sizeof(lpszErrortext));
}
Siehe auch:
LlExprEvaluate, LlExprType, LlExprError, LlExprFree