Formula Functions

LotusScript functions

As you write Lotusscript code, some function from the formula language may miss
you. Here they are (maybe not all of them).

At first I even rewrote some functions such as StrRight/Left[Back] as they were
not in the language reference of the R5 designer client, and then I found them
reading code from someone else.

Here are some formula function and the non-obvious LS equivalents :

@Trim(Array) : FullTrim(Array)
@Trim(String) : FullTrim(String)
("A" = "B":"A") : (StrGetIndex(L,S)=Null)
@Left("ABC";"B") : STRLeft
@Right("ABC";"B"): STRRight
@LeftBack : STRLeftBack
@RightBack : STRRightBack
Option Base 0

' Released 11 APR 2000,

Public Function Explode (Byval Src As String, Byval Sep As String) As Variant
' Remark : article 10.8, Array functions, tip from Ulrich Krause
' his function explode does the same. I did not examine his algorithm
toroughly so it's up to you to decide which one you prefer
' See @Explode, default separator = ";"
If (Sep = "") Then Sep = ";"
Sep = Left$ (Sep, 1)
Dim tmp() As String
Redim tmp(0)
pos% = 1
nextsep% = Instr (pos%, Src, Sep)
If (nextsep% > 0) Then
tmp(Ubound (tmp)) = Mid$ (Src, pos%, nextsep% - pos%)
Redim Preserve tmp(Ubound (tmp) + 1)
pos% = nextsep% + 1
End If
Loop Until ((nextsep% = 0) Or (pos% > Len (Src)))
tmp(Ubound (tmp)) = Mid$ (Src, pos%, Len(Src) - pos% + 1)
Explode = tmp
End Function

Public Function Implode (Source As Variant, Byval Sep As String) As String
' Remark : Same as above
' See @Implode, default separator = ";"
If (Not (Isarray (Source))) Then
Implode = Cstr (Source)
Exit Function
End If
If (Sep = "") Then Sep = ";"
Sep = Left$ (Sep, 1)
Forall Element In Source
Implode = Implode & Element & Sep
End Forall
If (Right$ (Implode, 1) = Sep) Then
Implode = Left$ (Implode, Len (Implode) - 1)
End If
End Function

Public Function ArrayRemove (Source As Variant, RemoveList As Variant) As
' AD:lotus411:10.8:Ulrich Krause
' ==============================
' Removes from Source any element common with RemoveList
If (Not (Isarray (Source))) Then
ArrayRemove = Source
Exit Function
End If
Dim CleanList() As Variant
Redim CleanList(0)
Forall Element In Source
' Only copy elements not found in RemoveList
If (Isnull (Arraygetindex (RemoveList, Element))) Then
CleanList(Ubound (CleanList)) = Element
Redim Preserve CleanList(Ubound (CleanList) + 1)
End If
End Forall
If (Ubound (CleanList) > 0) Then Redim Preserve CleanList(Ubound (CleanList) -
' Return processed list
ArrayRemove = CleanList
End Function

Public Function ProperCase(Source As String) As String
' See @ProperCase
prevchar$ = ""
For pos% = 1 To Len (Source)
c$ = Mid$ (Source$, pos%, 1)
If ((prevchar$ = " ") Or (prevchar$ = ".") Or _
(prevchar$ = "?") Or (prevchar$ = "!") Or (pos% = 1)) Then
ProperCase = ProperCase & Ucase$ (c$)
ProperCase = ProperCase & Lcase$ (c$)
End If
prevchar$ = c$
End Function

Public Function IsMember (ESLst As Variant, Lst As Variant) As Integer
' See @IsMember
If (Not (Isarray (Lst))) Then
IsMember = False
Exit Function
End If
If (Isarray (ESLst)) Then
' ESLst is an array
Forall Element In ESLst
' If one element can't be found in Lst : False
If (Isnull (Arraygetindex (Lst, Element))) Then
IsMember = False
Exit Function
End If
End Forall
' ESLst is a scalar
If (Isnull (Arraygetindex (Lst, ESLst))) Then
IsMember = False
Exit Function
End If
End If
IsMember = True
End Function

Public Function KeyWords (Source As String, KWL As Variant, Byval Sep As
String) As Variant
' See @KeyWords
' Generate separator list from Sep argument string or default
If (Sep = "") Then Sep = | ",.?!;:[](){}<>|
Dim SepList() As String
Redim SepList(Len(Sep))
For pos% = 1 To Len (Sep)
SepList(pos% - 1) = Mid$ (Sep, pos%, 1)
' Generate keyword list from list or scalar passed as KWL argument
Dim KeyWordList As Variant
If (Isarray (KWL)) Then
' KWL is an array
KeyWordList = KWL
' KWL is a scalar
Redim KeyWordList(0)
KeyWordList(0) = Cstr (KWL)
End If
' Parse the Source and look for the keywords
Dim KeyWordFound() As String
Redim KeyWordFound(0)
word$ = ""
For pos% = 1 To Len
This was last published in November 2000

Dig Deeper on Lotus Notes Domino Formula Language

Start the conversation

Send me notifications when other members comment.

By submitting you agree to receive email from TechTarget and its partners. If you reside outside of the United States, you consent to having your personal data transferred to and processed in the United States. Privacy

Please create a username to comment.




  • iSeries tutorials's tutorials provide in-depth information on the iSeries. Our iSeries tutorials address areas you need to know about...

  • V6R1 upgrade planning checklist

    When upgrading to V6R1, make sure your software will be supported, your programs will function and the correct PTFs have been ...

  • Connecting multiple iSeries systems through DDM

    Working with databases over multiple iSeries systems can be simple when remotely connecting logical partitions with distributed ...