Lotus Notes / Domino Sonstiges > Java und .NET mit Notes/Domino
Formelsprache TO LotusScript Code-generierer schreiben
flaite:
Attraktiv finde ich:
- ich kann es direkt sinnvoll einsetzen
- ich kann nach dem "Scharping-Prinzip" vorgehen: laaannngsam. Dh. muss nicht alles direkt fertig sein, damit es einen Nutzen stiftet. Wenn der Teile des Formelsprachencodes stehen lässt und z.B. erstmal nur die DBLookups konvertiert ist es besser als vorher.
Ich glaub ich fang am WE an. Oder vorher. Ist aber schwierig vorher anzufangen. Sobald ich was habe, poste ich.
Gandhi:
Genau: Formeln lassen sich wie folgt aufteilen: In einen Array aus Trees.
Ist keine Klammer mehr zu schliessen ergibt ein Semikolon einen neuen Tree.
Im ersten Schritt müsste also nach dieser Regel ein Array von Root-Knoten erzeugt werden, die dann separat aufzudröseln sind.
Problematisch ist auch der Kontext einer Formula - je nach Ort des Auftretens ist da ein anderer ScriptCode zu erzeugen.
flaite:
Ich brauche ich bruache für den ganzen Tree EINEN Einstiegspunkt. Ist aber egal. Dieser eine Einstiegspunkt hat dann eben eine List aus dem was du meinst.
Gandhi:
Also ein Array hat - gegenüber einem 'normalen' Tree den Vorteil, dass er sortiert ist - was bei der Reihenfolge der Auswertung ja nicht ganz unwichtig ist.
Ausserdem - und viel wichtiger - entspricht das meiner Meinung nach eher dem, was eine Formel darstellt: Eine Reihe von Trees - letztendlich durch Semikolon getrennt (wenn keine Klammer zu schliessen ist).
Einen solchen Array mit Einstiegsknoten erhält man - z.B. so: (entnommen einem Button, der ein Feld namens Formula zerlegt).
Dim formula As String
Dim openBrackets As Integer
Dim closedBrackets As Integer
Dim stringPointer As Integer
Dim TreeArr() As String
Redim TreeArr(0)
Dim cursor As String
Dim token As String
Dim uwo As New NotesUIWorkspace
Dim udo As NotesUIDocument
Set udo=uwo.currentdocument
formula=udo.FieldGetText("formula")
For stringPointer=1 To Len(formula)
cursor=Mid(formula,stringPointer,1)
If Not (cursor=Chr(10) Or cursor=Chr(13)) Then 'ignore
If cursor=";" Then
If openBrackets=closedBrackets Then
'Token complete
Redim Preserve TreeArr(Ubound(TreeArr)+1)
treeArr(Ubound(TreeArr)-1)=token
token=""
Else 'still open brackets
token=token+cursor
End If
Elseif cursor="(" Then
openBrackets=openBrackets+1
token=token+cursor
Elseif cursor=")" Then
closedBrackets=closedBrackets+1
token=token+cursor
Else
token=token+cursor
End If
End If
Next
Nur als Beispiel - ziemlich ungetestet und ungeschönt.
Gandhi:
Diese Trees müssen nun weiterverarbeitet werden - hierbei beginnt dann wohl die Arbeit...
Navigation
[0] Themen-Index
[#] Nächste Seite
[*] Vorherige Sete
Zur normalen Ansicht wechseln