Domino 9 und frühere Versionen > ND6: Entwicklung
Formel für Evaluate() aus Profildokument lesen
TRO:
--- Zitat von: Tode am 24.08.11 - 16:33:13 ---@Toni: Die Liste der "Schwächen" dieses Codes liesse sich noch um einige erweitern ...., Dim var as Variant innerhalb der Schleife, ...
--- Ende Zitat ---
Was ist daran falsch? Dim als Code-Element wird zur Compile-Zeit und nicht zur Runtime ausgeführt. Damit ist es völlig unerheblich ob das Dim in einer millionenfachen Schleife steht oder außerhalb aller Schleifen --> es wird immer nur einmal ausgeführt (und initialisiert).
Es gibt sogar Programmierphilosophien, die schreiben eine möglichts verwendungsnahe Variablendeklaration vor.
Thomas
Dynadrate:
@Tode: Danke, das wars! Ich wat vollig fixiert darauf, das Evaluate() zu keinem richtigen Ergebnis kommen kann, weil die Anführungszeichen "vermurkst" sind.
--- Zitat von: ata am 24.08.11 - 16:23:40 ---Deine Bedingung zur Erkennung der Formel ist etwas schwach, da damit deine Formel zwingend mit @ beginnen muß - und das muß nicht sein...
--- Ende Zitat ---
Das stimmt! Mir ist nur keine bessere Methode eingefallen, um Formelcode zu erkennen. Wüsstest Du was besseres? Schlimmstenfall müsste man einen Indikator zu Beginn einer jeden Zeile einführen, der klar macht ob es ein Feldname oder ein Formelbefehl ist. Toll wäre aber schon, wenn man es erkennen könnte ;)
--- Zitat von: ata am 24.08.11 - 16:42:18 ---Es findet auch keine Validierung der Formel statt - da liese sich noch viel dran machen, um das sauber zu handeln :) - schade - denn damit sind mächtige Operationen möglich...
--- Ende Zitat ---
Wie kann ich die Formel validieren?
--- Zitat von: Tode am 24.08.11 - 16:33:13 ---@Toni: Die Liste der "Schwächen" dieses Codes liesse sich noch um einige erweitern (kein Error- Handling, Dim var as Variant innerhalb der Schleife, keine Prüfung, ob Variablen überhaupt initialisiert wurden, etc... ), deshalb habe ich auf diesen Hinweis mal verzichtet...
--- Ende Zitat ---
Danke für den Hinweis! Kurze "Rechtfertigung" meinerseits.
* "Dim var as Variant" kommt zustande weil ich quasi noch in der Erprobungsphase stecke. Natürlich wird das sofort ordentlich typisiert, wenns funktioniert ;)
* kein Error- Handling: völlig Richtig. Ich verspreche brav, mir bei nächster Gelegenheit diesen Thread: http://atnotes.de/index.php?topic=11980.0 zur Gemüte zu führen.
* keine Prüfung, ob Variablen überhaupt initialisiert wurden: An welchen Stellen würdest Du eine solche Prüfung mit einbauen?
* etc.: Ich bin offen für jede Art von Verbesserungsvorschlag! Ich würde mich freuen, wenn Du mir weitere Kritikpunkte nennen würdest
TRO:
--- Zitat von: Dynadrate am 24.08.11 - 16:52:42 ---
--- Zitat von: ata am 24.08.11 - 16:23:40 ---Deine Bedingung zur Erkennung der Formel ist etwas schwach, da damit deine Formel zwingend mit @ beginnen muß - und das muß nicht sein...
--- Ende Zitat ---
Das stimmt! Mir ist nur keine bessere Methode eingefallen, um Formelcode zu erkennen. Wüsstest Du was besseres? Schlimmstenfall müsste man einen Indikator zu Beginn einer jeden Zeile einführen, der klar macht ob es ein Feldname oder ein Formelbefehl ist. Toll wäre aber schon, wenn man es erkennen könnte ;)
--- Ende Zitat ---
Ich mach das immer mit einem @ als Kenner und werfe ihn dann mittels Mid( sFormula, 1 ) weg. Ein Evaluate-String, der mit einem Formelbefehl startet hat dann zwei @@ am Anfang, z.B. @@Text( Datumswert ).
Auch einen Feldnamen kannst Du mit einem Evaluate auswerten:
vEval = Evaluate( "Feldname", doc ) liefert Dir den Inhalt des Feldes (genauer: des Items) mit dem Namen Feldname.
Schwieriger (und das meinte wohl Anton) sind solche Evaluate-Formeln, die z.B. mit einer Zeichenkette beginnen:
"Firma: " + CompanyName
--- Zitat von: Dynadrate am 24.08.11 - 16:52:42 ---
Danke für den Hinweis! Kurze "Rechtfertigung" meinerseits.
* "Dim var as Variant" kommt zustande weil ich quasi noch in der Erprobungsphase stecke. Natürlich wird das sofort ordentlich typisiert, wenns funktioniert ;)
--- Ende Zitat ---
"Dim var as Variant" ist vollkommen korrekt deklariert (event. könnte man den Variablen-Namen noch etwas aussagekräftiger machen).
Evaluate liefert Daten vom Typ Variant zurück (immer als Array).
hth
Thomas
ata:
Hallole
@TRO (Thomas)
--- Zitat ---Es gibt sogar Programmierphilosophien, die schreiben eine möglichts verwendungsnahe Variablendeklaration vor.
--- Ende Zitat ---
... das mag sein - falsch ist es nicht, aber für eine bessere Übersichtlichkeit bei größerem Code ist sicherlich dienlicher die Deklaration im Kopf der Funktion vorzunehmen. Ich habe mir das so angewöhnt und fahre sehr gut damit. Dort kann man dann zusammengehörige Variablen miteinander deklarieren.
--- Zitat ---Ich mach das immer mit einem @ als Kenner und werfe ihn dann mittels Mid( sFormula, 1 ) weg. Ein Evaluate-String, der mit einem Formelbefehl startet hat dann zwei @@ am Anfang, z.B. @@Text( Datumswert ).
--- Ende Zitat ---
... das ist schon ein guter Ansatz. Bleibt noch die Validierung der Formel. Die kann man über Formelbefehle validieren - also einen weiteren Evaluate mit dem entsprechenden Formelstring...
@Dynadrate (Markus)
--- Zitat ---keine Prüfung, ob Variablen überhaupt initialisiert wurden: An welchen Stellen würdest Du eine solche Prüfung mit einbauen?
--- Ende Zitat ---
... getProfileDocument(...) => Bei NotesProfileDoument überprüfe ich immer, ob ich es auch habe. Die können durchaus verloren gehen - leider - ich versuche auf NotesProfileDocuments so weit wie möglich zu verzichten...
... flds => Hat das Array members - es könnte auch leer sein
... v => beim Einlesen deiner Werte werden Mehrfachwerte mit einem Semikolon verkettet - da muß sichergestellt sein, daß keine Semikolon's in deinen Quellfeldern enthalten sind, das hätte Auswirkungen auf die Anzahl der Werte
Das wären mal auf die schnelle die Auffälligsten ;)
Bei deinem Export gehst du pro Zeile auf ein Feld und schreibst in den Range die Werte, soweit ich das erkenne. Ich splitte Mehrfachwerte in neue Zeilen, da der Range erst nach Office 2003 mehr als 256 Spalten haben kann...
Toni
*** edit ***
Im Fehlerfall bleibt dir die Excel-Instanz unsichtbar geöffnet. Du solltest das Excel im Fehlerfall schließen...
ata:
... die Formel zur Prüfung der Syntax ist @CheckFormulaSyntax( _code ) und liefert ein True oder False
Toni
Navigation
[0] Themen-Index
[#] Nächste Seite
[*] Vorherige Sete
Zur normalen Ansicht wechseln