Manage Learn to apply best practices and optimize your operations.

# 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

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, pkannoglou@netcourrier.com

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
Do
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
Variant
' ==============================
' 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
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) -
1)
' 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\$)
Else
ProperCase = ProperCase & Lcase\$ (c\$)
End If
prevchar\$ = c\$
Next
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
Else
' 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)
Next
' 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
Else
' 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

#### Start the conversation

Send me notifications when other members comment.

## SearchWindowsServer

• ### Azure PowerShell cmdlets monitor, manage VMs

PowerShell gives administrators a way to customize reports that hone in on the details that matter to the business, such as the ...

• ### Windows out-of-band patches overshadow April Patch Tuesday

Microsoft delivered out-of-band security patches to address the Total Meltdown and malware engine exploits as a precursor to its ...

• ### Microsoft Project Honolulu shows promise but needs work

Microsoft Project Honolulu is still in the technical preview stage, but it needs to resolve a number of issues before it's a ...

## Search400

• ### iSeries tutorials

Search400.com'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 ...

## SearchDataCenter

• ### Guide to buying server performance monitoring software

Integration, storage and vendor support all affect whether a performance monitoring tool is right for an organization. Mull over ...

• ### How IBM's data science team quickens users' AI projects

In this Q&A, IBM's Seth Dobrin discusses the rising user interest in machine learning and AI projects and the help inexperienced ...

• ### IBM blockchain technology spotlights mainframes

IBM's blockchain offerings aim to ease enterprise IT concerns by combining Z system mainframe hardware with industry-specific ...

## SearchExchange

• ### Cloud-based email security tools barricade entry to Exchange

The pressure is on Exchange administrators to avoid a ransomware outbreak that cripples the on-premises email system. Cloud-based...

• ### Migrating public folders requires extensive planning

Do your homework to find the right option for public folders when making a move to Exchange Online. Here are guidelines to help ...

• ### Using Microsoft Exchange certificates requires planning

Exchange certificates typically require minimal management effort after they have been set up, and they offer a secure means of ...

## SearchContentManagement

• ### Going paperless, AI, blockchain headline AIIM Conference

AI, cloud storage and blockchain technology were discussed at the AIIM Conference. The Pipeline podcast rehashes the conference ...

• ### How a digital transformation process helped curb reliance on paper

By moving on from paper, the North Carolina Court System and the Texas Animal Health Commission were able to accommodate ...

• ### Intelligent information management is ready for AI, blockchain

A panel discussion at AIIM 2018 looked at how AI, cloud and blockchain will disrupt the intelligent information management space.

Close