xref: /aoo4110/main/wizards/source/tools/Strings.xba (revision b1cdbd2c)
1*b1cdbd2cSJim Jagielski<?xml version="1.0" encoding="UTF-8"?>
2*b1cdbd2cSJim Jagielski<!DOCTYPE script:module PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "module.dtd">
3*b1cdbd2cSJim Jagielski<!--***********************************************************
4*b1cdbd2cSJim Jagielski *
5*b1cdbd2cSJim Jagielski * Licensed to the Apache Software Foundation (ASF) under one
6*b1cdbd2cSJim Jagielski * or more contributor license agreements.  See the NOTICE file
7*b1cdbd2cSJim Jagielski * distributed with this work for additional information
8*b1cdbd2cSJim Jagielski * regarding copyright ownership.  The ASF licenses this file
9*b1cdbd2cSJim Jagielski * to you under the Apache License, Version 2.0 (the
10*b1cdbd2cSJim Jagielski * "License"); you may not use this file except in compliance
11*b1cdbd2cSJim Jagielski * with the License.  You may obtain a copy of the License at
12*b1cdbd2cSJim Jagielski *
13*b1cdbd2cSJim Jagielski *   http://www.apache.org/licenses/LICENSE-2.0
14*b1cdbd2cSJim Jagielski *
15*b1cdbd2cSJim Jagielski * Unless required by applicable law or agreed to in writing,
16*b1cdbd2cSJim Jagielski * software distributed under the License is distributed on an
17*b1cdbd2cSJim Jagielski * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
18*b1cdbd2cSJim Jagielski * KIND, either express or implied.  See the License for the
19*b1cdbd2cSJim Jagielski * specific language governing permissions and limitations
20*b1cdbd2cSJim Jagielski * under the License.
21*b1cdbd2cSJim Jagielski *
22*b1cdbd2cSJim Jagielski ***********************************************************-->
23*b1cdbd2cSJim Jagielski<script:module xmlns:script="http://openoffice.org/2000/script" script:name="Strings" script:language="StarBasic">Option Explicit
24*b1cdbd2cSJim JagielskiPublic sProductname as String
25*b1cdbd2cSJim Jagielski
26*b1cdbd2cSJim Jagielski
27*b1cdbd2cSJim Jagielski&apos; Deletes out of a String &apos;BigString&apos; all possible PartStrings, that are summed up
28*b1cdbd2cSJim Jagielski&apos; in the Array &apos;ElimArray&apos;
29*b1cdbd2cSJim JagielskiFunction ElimChar(ByVal BigString as String, ElimArray() as String)
30*b1cdbd2cSJim JagielskiDim i% ,n%
31*b1cdbd2cSJim Jagielski	For i = 0 to Ubound(ElimArray)
32*b1cdbd2cSJim Jagielski		BigString = DeleteStr(BigString,ElimArray(i)
33*b1cdbd2cSJim Jagielski	Next
34*b1cdbd2cSJim Jagielski	ElimChar = BigString
35*b1cdbd2cSJim JagielskiEnd Function
36*b1cdbd2cSJim Jagielski
37*b1cdbd2cSJim Jagielski
38*b1cdbd2cSJim Jagielski&apos; Deletes out of a String &apos;BigString&apos; a possible Partstring &apos;CompString&apos;
39*b1cdbd2cSJim JagielskiFunction DeleteStr(ByVal BigString,CompString as String) as String
40*b1cdbd2cSJim JagielskiDim i%, CompLen%, BigLen%
41*b1cdbd2cSJim Jagielski	CompLen = Len(CompString)
42*b1cdbd2cSJim Jagielski	i = 1
43*b1cdbd2cSJim Jagielski	While i &lt;&gt; 0
44*b1cdbd2cSJim Jagielski		i = Instr(i, BigString,CompString)
45*b1cdbd2cSJim Jagielski		If i &lt;&gt; 0 then
46*b1cdbd2cSJim Jagielski			BigLen = Len(BigString)
47*b1cdbd2cSJim Jagielski			BigString = Mid(BigString,1,i-1) + Mid(BigString,i+CompLen,BigLen-i+1-CompLen)
48*b1cdbd2cSJim Jagielski		End If
49*b1cdbd2cSJim Jagielski	Wend
50*b1cdbd2cSJim Jagielski	DeleteStr = BigString
51*b1cdbd2cSJim JagielskiEnd Function
52*b1cdbd2cSJim Jagielski
53*b1cdbd2cSJim Jagielski
54*b1cdbd2cSJim Jagielski&apos; Finds a PartString, that is framed by the Strings &apos;Prestring&apos; and &apos;PostString&apos;
55*b1cdbd2cSJim JagielskiFunction FindPartString(BigString, PreString, PostString as String, SearchPos as Integer) as String
56*b1cdbd2cSJim JagielskiDim StartPos%, EndPos%
57*b1cdbd2cSJim JagielskiDim BigLen%, PreLen%, PostLen%
58*b1cdbd2cSJim Jagielski	StartPos = Instr(SearchPos,BigString,PreString)
59*b1cdbd2cSJim Jagielski	If StartPos &lt;&gt; 0 Then
60*b1cdbd2cSJim Jagielski		PreLen = Len(PreString)
61*b1cdbd2cSJim Jagielski		EndPos = Instr(StartPos + PreLen,BigString,PostString)
62*b1cdbd2cSJim Jagielski		If EndPos &lt;&gt; 0 Then
63*b1cdbd2cSJim Jagielski			BigLen = Len(BigString)
64*b1cdbd2cSJim Jagielski			PostLen = Len(PostString)
65*b1cdbd2cSJim Jagielski			FindPartString = Mid(BigString,StartPos + PreLen, EndPos - (StartPos + PreLen))
66*b1cdbd2cSJim Jagielski			SearchPos = EndPos + PostLen
67*b1cdbd2cSJim Jagielski		Else
68*b1cdbd2cSJim Jagielski			Msgbox(&quot;No final tag for &apos;&quot; &amp; PreString &amp; &quot;&apos; existing&quot;, 16, GetProductName())
69*b1cdbd2cSJim Jagielski			FindPartString = &quot;&quot;
70*b1cdbd2cSJim Jagielski		End If
71*b1cdbd2cSJim Jagielski	Else
72*b1cdbd2cSJim Jagielski		FindPartString = &quot;&quot;
73*b1cdbd2cSJim Jagielski	End If
74*b1cdbd2cSJim JagielskiEnd Function
75*b1cdbd2cSJim Jagielski
76*b1cdbd2cSJim Jagielski
77*b1cdbd2cSJim Jagielski&apos; Note iCompare = 0 (Binary comparison)
78*b1cdbd2cSJim Jagielski&apos; 	   iCompare = 1 (Text comparison)
79*b1cdbd2cSJim JagielskiFunction PartStringInArray(BigArray(), SearchString as String, iCompare as Integer) as Integer
80*b1cdbd2cSJim JagielskiDim MaxIndex as Integer
81*b1cdbd2cSJim JagielskiDim i as Integer
82*b1cdbd2cSJim Jagielski	MaxIndex = Ubound(BigArray())
83*b1cdbd2cSJim Jagielski	For i = 0 To MaxIndex
84*b1cdbd2cSJim Jagielski		If Instr(1, BigArray(i), SearchString, iCompare) &lt;&gt; 0 Then
85*b1cdbd2cSJim Jagielski			PartStringInArray() = i
86*b1cdbd2cSJim Jagielski			Exit Function
87*b1cdbd2cSJim Jagielski		End If
88*b1cdbd2cSJim Jagielski	Next i
89*b1cdbd2cSJim Jagielski	PartStringInArray() = -1
90*b1cdbd2cSJim JagielskiEnd Function
91*b1cdbd2cSJim Jagielski
92*b1cdbd2cSJim Jagielski
93*b1cdbd2cSJim Jagielski&apos; Deletes the String &apos;SmallString&apos; out of the String &apos;BigString&apos;
94*b1cdbd2cSJim Jagielski&apos; in case SmallString&apos;s Position in BigString is right at the end
95*b1cdbd2cSJim JagielskiFunction RTrimStr(ByVal BigString, SmallString as String) as String
96*b1cdbd2cSJim JagielskiDim SmallLen as Integer
97*b1cdbd2cSJim JagielskiDim BigLen as Integer
98*b1cdbd2cSJim Jagielski	SmallLen = Len(SmallString)
99*b1cdbd2cSJim Jagielski	BigLen = Len(BigString)
100*b1cdbd2cSJim Jagielski	If Instr(1,BigString, SmallString) &lt;&gt; 0 Then
101*b1cdbd2cSJim Jagielski		If Mid(BigString,BigLen + 1 - SmallLen, SmallLen) = SmallString Then
102*b1cdbd2cSJim Jagielski			RTrimStr = Mid(BigString,1,BigLen - SmallLen)
103*b1cdbd2cSJim Jagielski		Else
104*b1cdbd2cSJim Jagielski			RTrimStr = BigString
105*b1cdbd2cSJim Jagielski		End If
106*b1cdbd2cSJim Jagielski	Else
107*b1cdbd2cSJim Jagielski		RTrimStr = BigString
108*b1cdbd2cSJim Jagielski	End If
109*b1cdbd2cSJim JagielskiEnd Function
110*b1cdbd2cSJim Jagielski
111*b1cdbd2cSJim Jagielski
112*b1cdbd2cSJim Jagielski&apos; Deletes the Char &apos;CompChar&apos; out of the String &apos;BigString&apos;
113*b1cdbd2cSJim Jagielski&apos; in case CompChar&apos;s Position in BigString is right at the beginning
114*b1cdbd2cSJim JagielskiFunction LTRimChar(ByVal BigString as String,CompChar as String) as String
115*b1cdbd2cSJim JagielskiDim BigLen as integer
116*b1cdbd2cSJim Jagielski	BigLen = Len(BigString)
117*b1cdbd2cSJim Jagielski	If BigLen &gt; 1 Then
118*b1cdbd2cSJim Jagielski		If Left(BigString,1) = CompChar then
119*b1cdbd2cSJim Jagielski	 		BigString = Mid(BigString,2,BigLen-1)
120*b1cdbd2cSJim Jagielski	 	End If
121*b1cdbd2cSJim Jagielski	ElseIf BigLen = 1 Then
122*b1cdbd2cSJim Jagielski	 	BigString = &quot;&quot;
123*b1cdbd2cSJim Jagielski	End If
124*b1cdbd2cSJim Jagielski	LTrimChar = BigString
125*b1cdbd2cSJim JagielskiEnd Function
126*b1cdbd2cSJim Jagielski
127*b1cdbd2cSJim Jagielski
128*b1cdbd2cSJim Jagielski&apos; Retrieves an Array out of a String.
129*b1cdbd2cSJim Jagielski&apos; The fields of the Array are separated by the parameter &apos;Separator&apos;, that is contained
130*b1cdbd2cSJim Jagielski&apos; in the Array
131*b1cdbd2cSJim Jagielski&apos; The Array MaxIndex delivers the highest Index of this Array
132*b1cdbd2cSJim JagielskiFunction ArrayOutOfString(BigString, Separator as String, Optional MaxIndex as Integer)
133*b1cdbd2cSJim JagielskiDim LocList() as String
134*b1cdbd2cSJim Jagielski	LocList=Split(BigString,Separator)
135*b1cdbd2cSJim Jagielski
136*b1cdbd2cSJim Jagielski	If not isMissing(MaxIndex) then maxIndex=ubound(LocList())
137*b1cdbd2cSJim Jagielski
138*b1cdbd2cSJim Jagielski	ArrayOutOfString=LocList
139*b1cdbd2cSJim JagielskiEnd Function
140*b1cdbd2cSJim Jagielski
141*b1cdbd2cSJim Jagielski
142*b1cdbd2cSJim Jagielski&apos; Deletes all fieldvalues in one-dimensional Array
143*b1cdbd2cSJim JagielskiSub ClearArray(BigArray)
144*b1cdbd2cSJim JagielskiDim i as integer
145*b1cdbd2cSJim Jagielski	For i = Lbound(BigArray()) to Ubound(BigArray())
146*b1cdbd2cSJim Jagielski		BigArray(i) = &quot;&quot;
147*b1cdbd2cSJim Jagielski	Next
148*b1cdbd2cSJim JagielskiEnd Sub
149*b1cdbd2cSJim Jagielski
150*b1cdbd2cSJim Jagielski
151*b1cdbd2cSJim Jagielski&apos; Deletes all fieldvalues in a multidimensional Array
152*b1cdbd2cSJim JagielskiSub ClearMultiDimArray(BigArray,DimCount as integer)
153*b1cdbd2cSJim JagielskiDim n%, m%
154*b1cdbd2cSJim Jagielski	For n = Lbound(BigArray(),1) to Ubound(BigArray(),1)
155*b1cdbd2cSJim Jagielski		For m = 0 to Dimcount - 1
156*b1cdbd2cSJim Jagielski			BigArray(n,m) = &quot;&quot;
157*b1cdbd2cSJim Jagielski		Next m
158*b1cdbd2cSJim Jagielski	Next n
159*b1cdbd2cSJim JagielskiEnd Sub
160*b1cdbd2cSJim Jagielski
161*b1cdbd2cSJim Jagielski
162*b1cdbd2cSJim Jagielski&apos; Checks if a Field (LocField) is already defined in an Array
163*b1cdbd2cSJim Jagielski&apos; Returns &apos;True&apos; or &apos;False&apos;
164*b1cdbd2cSJim JagielskiFunction FieldinArray(LocArray(), MaxIndex as integer, LocField as String) As Boolean
165*b1cdbd2cSJim JagielskiDim i as integer
166*b1cdbd2cSJim Jagielski	For i = Lbound(LocArray()) to MaxIndex
167*b1cdbd2cSJim Jagielski		If Ucase(LocArray(i)) = Ucase(LocField) Then
168*b1cdbd2cSJim Jagielski			FieldInArray = True
169*b1cdbd2cSJim Jagielski			Exit Function
170*b1cdbd2cSJim Jagielski		End if
171*b1cdbd2cSJim Jagielski	Next
172*b1cdbd2cSJim Jagielski	FieldInArray = False
173*b1cdbd2cSJim JagielskiEnd Function
174*b1cdbd2cSJim Jagielski
175*b1cdbd2cSJim Jagielski
176*b1cdbd2cSJim Jagielski&apos; Checks if a Field (LocField) is already defined in an Array
177*b1cdbd2cSJim Jagielski&apos; Returns &apos;True&apos; or &apos;False&apos;
178*b1cdbd2cSJim JagielskiFunction FieldinList(LocField, BigList()) As Boolean
179*b1cdbd2cSJim JagielskiDim i as integer
180*b1cdbd2cSJim Jagielski	For i = Lbound(BigList()) to Ubound(BigList())
181*b1cdbd2cSJim Jagielski		If LocField = BigList(i) Then
182*b1cdbd2cSJim Jagielski			FieldInList = True
183*b1cdbd2cSJim Jagielski			Exit Function
184*b1cdbd2cSJim Jagielski		End if
185*b1cdbd2cSJim Jagielski	Next
186*b1cdbd2cSJim Jagielski	FieldInList = False
187*b1cdbd2cSJim JagielskiEnd Function
188*b1cdbd2cSJim Jagielski
189*b1cdbd2cSJim Jagielski
190*b1cdbd2cSJim Jagielski&apos; Retrieves the Index of the delivered String &apos;SearchString&apos; in
191*b1cdbd2cSJim Jagielski&apos; the Array LocList()&apos;
192*b1cdbd2cSJim JagielskiFunction IndexinArray(SearchString as String, LocList()) as Integer
193*b1cdbd2cSJim JagielskiDim i as integer
194*b1cdbd2cSJim Jagielski	For i = Lbound(LocList(),1) to Ubound(LocList(),1)
195*b1cdbd2cSJim Jagielski		If Ucase(LocList(i,0)) = Ucase(SearchString) Then
196*b1cdbd2cSJim Jagielski			IndexinArray = i
197*b1cdbd2cSJim Jagielski			Exit Function
198*b1cdbd2cSJim Jagielski		End if
199*b1cdbd2cSJim Jagielski	Next
200*b1cdbd2cSJim Jagielski	IndexinArray = -1
201*b1cdbd2cSJim JagielskiEnd Function
202*b1cdbd2cSJim Jagielski
203*b1cdbd2cSJim Jagielski
204*b1cdbd2cSJim JagielskiSub MultiArrayInListbox(oDialog as Object, ListboxName as String, ValList(), iDim as Integer)
205*b1cdbd2cSJim JagielskiDim oListbox as Object
206*b1cdbd2cSJim JagielskiDim i as integer
207*b1cdbd2cSJim JagielskiDim a as Integer
208*b1cdbd2cSJim Jagielski	a = 0
209*b1cdbd2cSJim Jagielski	oListbox = oDialog.GetControl(ListboxName)
210*b1cdbd2cSJim Jagielski	oListbox.RemoveItems(0, oListbox.GetItemCount)
211*b1cdbd2cSJim Jagielski	For i = 0 to Ubound(ValList(), 1)
212*b1cdbd2cSJim Jagielski		If ValList(i) &lt;&gt; &quot;&quot; Then
213*b1cdbd2cSJim Jagielski			oListbox.AddItem(ValList(i, iDim-1), a)
214*b1cdbd2cSJim Jagielski			a = a + 1
215*b1cdbd2cSJim Jagielski		End If
216*b1cdbd2cSJim Jagielski	Next
217*b1cdbd2cSJim JagielskiEnd Sub
218*b1cdbd2cSJim Jagielski
219*b1cdbd2cSJim Jagielski
220*b1cdbd2cSJim Jagielski&apos; Searches for a String in a two-dimensional Array by querying all Searchindexex of the second dimension
221*b1cdbd2cSJim Jagielski&apos; and delivers the specific String of the ReturnIndex in the second dimension of the Searchlist()
222*b1cdbd2cSJim JagielskiFunction StringInMultiArray(SearchList(), SearchString as String, SearchIndex as Integer, ReturnIndex as Integer, Optional MaxIndex as Integer) as String
223*b1cdbd2cSJim JagielskiDim i as integer
224*b1cdbd2cSJim JagielskiDim CurFieldString as String
225*b1cdbd2cSJim Jagielski	If IsMissing(MaxIndex) Then
226*b1cdbd2cSJim Jagielski		MaxIndex = Ubound(SearchList(),1)
227*b1cdbd2cSJim Jagielski	End If
228*b1cdbd2cSJim Jagielski	For i = Lbound(SearchList()) to MaxIndex
229*b1cdbd2cSJim Jagielski		CurFieldString = SearchList(i,SearchIndex)
230*b1cdbd2cSJim Jagielski		If  Ucase(CurFieldString) = Ucase(SearchString) Then
231*b1cdbd2cSJim Jagielski			StringInMultiArray() = SearchList(i,ReturnIndex)
232*b1cdbd2cSJim Jagielski			Exit Function
233*b1cdbd2cSJim Jagielski		End if
234*b1cdbd2cSJim Jagielski	Next
235*b1cdbd2cSJim Jagielski	StringInMultiArray() = &quot;&quot;
236*b1cdbd2cSJim JagielskiEnd Function
237*b1cdbd2cSJim Jagielski
238*b1cdbd2cSJim Jagielski
239*b1cdbd2cSJim Jagielski&apos; Searches for a Value in multidimensial Array by querying all Searchindices of the passed dimension
240*b1cdbd2cSJim Jagielski&apos; and delivers the Index where it is found.
241*b1cdbd2cSJim JagielskiFunction GetIndexInMultiArray(SearchList(), SearchValue, SearchIndex as Integer) as Integer
242*b1cdbd2cSJim JagielskiDim i as integer
243*b1cdbd2cSJim JagielskiDim MaxIndex as Integer
244*b1cdbd2cSJim JagielskiDim CurFieldValue
245*b1cdbd2cSJim Jagielski	MaxIndex = Ubound(SearchList(),1)
246*b1cdbd2cSJim Jagielski	For i = Lbound(SearchList()) to MaxIndex
247*b1cdbd2cSJim Jagielski		CurFieldValue = SearchList(i,SearchIndex)
248*b1cdbd2cSJim Jagielski		If CurFieldValue = SearchValue Then
249*b1cdbd2cSJim Jagielski			GetIndexInMultiArray() = i
250*b1cdbd2cSJim Jagielski			Exit Function
251*b1cdbd2cSJim Jagielski		End if
252*b1cdbd2cSJim Jagielski	Next
253*b1cdbd2cSJim Jagielski	GetIndexInMultiArray() = -1
254*b1cdbd2cSJim JagielskiEnd Function
255*b1cdbd2cSJim Jagielski
256*b1cdbd2cSJim Jagielski
257*b1cdbd2cSJim Jagielski&apos; Searches for a Value in multidimensial Array by querying all Searchindices of the passed dimension
258*b1cdbd2cSJim Jagielski&apos; and delivers the Index where the Searchvalue is found as a part string
259*b1cdbd2cSJim JagielskiFunction GetIndexForPartStringinMultiArray(SearchList(), SearchValue, SearchIndex as Integer) as Integer
260*b1cdbd2cSJim JagielskiDim i as integer
261*b1cdbd2cSJim JagielskiDim MaxIndex as Integer
262*b1cdbd2cSJim JagielskiDim CurFieldValue
263*b1cdbd2cSJim Jagielski	MaxIndex = Ubound(SearchList(),1)
264*b1cdbd2cSJim Jagielski	For i = Lbound(SearchList()) to MaxIndex
265*b1cdbd2cSJim Jagielski		CurFieldValue = SearchList(i,SearchIndex)
266*b1cdbd2cSJim Jagielski		If Instr(CurFieldValue, SearchValue) &gt; 0 Then
267*b1cdbd2cSJim Jagielski			GetIndexForPartStringinMultiArray() = i
268*b1cdbd2cSJim Jagielski			Exit Function
269*b1cdbd2cSJim Jagielski		End if
270*b1cdbd2cSJim Jagielski	Next
271*b1cdbd2cSJim Jagielski	GetIndexForPartStringinMultiArray = -1
272*b1cdbd2cSJim JagielskiEnd Function
273*b1cdbd2cSJim Jagielski
274*b1cdbd2cSJim Jagielski
275*b1cdbd2cSJim JagielskiFunction ArrayfromMultiArray(MultiArray as String, iDim as Integer)
276*b1cdbd2cSJim JagielskiDim MaxIndex as Integer
277*b1cdbd2cSJim JagielskiDim i as Integer
278*b1cdbd2cSJim Jagielski	MaxIndex = Ubound(MultiArray())
279*b1cdbd2cSJim Jagielski	Dim ResultArray(MaxIndex) as String
280*b1cdbd2cSJim Jagielski	For i = 0 To MaxIndex
281*b1cdbd2cSJim Jagielski		ResultArray(i) = MultiArray(i,iDim)
282*b1cdbd2cSJim Jagielski	Next i
283*b1cdbd2cSJim Jagielski	ArrayfromMultiArray() = ResultArray()
284*b1cdbd2cSJim JagielskiEnd Function
285*b1cdbd2cSJim Jagielski
286*b1cdbd2cSJim Jagielski
287*b1cdbd2cSJim Jagielski&apos; Replaces the string &quot;OldReplace&quot; through the String &quot;NewReplace&quot; in the String
288*b1cdbd2cSJim Jagielski&apos; &apos;BigString&apos;
289*b1cdbd2cSJim JagielskiFunction ReplaceString(ByVal Bigstring, NewReplace, OldReplace as String)  as String
290*b1cdbd2cSJim Jagielski	ReplaceString=join(split(BigString,OldReplace),NewReplace)
291*b1cdbd2cSJim JagielskiEnd Function
292*b1cdbd2cSJim Jagielski
293*b1cdbd2cSJim Jagielski
294*b1cdbd2cSJim Jagielski&apos; Retrieves the second value for a next to &apos;SearchString&apos; in
295*b1cdbd2cSJim Jagielski&apos; a two-dimensional string-Array
296*b1cdbd2cSJim JagielskiFunction FindSecondValue(SearchString as String, TwoDimList() as String ) as String
297*b1cdbd2cSJim JagielskiDim i as Integer
298*b1cdbd2cSJim Jagielski	For i = 0 To Ubound(TwoDimList,1)
299*b1cdbd2cSJim Jagielski		If Ucase(SearchString) = Ucase(TwoDimList(i,0)) Then
300*b1cdbd2cSJim Jagielski			FindSecondValue = TwoDimList(i,1)
301*b1cdbd2cSJim Jagielski			Exit For
302*b1cdbd2cSJim Jagielski		End If
303*b1cdbd2cSJim Jagielski	Next
304*b1cdbd2cSJim JagielskiEnd Function
305*b1cdbd2cSJim Jagielski
306*b1cdbd2cSJim Jagielski
307*b1cdbd2cSJim Jagielski&apos; raises a base to a certain power
308*b1cdbd2cSJim JagielskiFunction Power(Basis as Double, Exponent as Double) as Double
309*b1cdbd2cSJim Jagielski	Power = Exp(Exponent*Log(Basis))
310*b1cdbd2cSJim JagielskiEnd Function
311*b1cdbd2cSJim Jagielski
312*b1cdbd2cSJim Jagielski
313*b1cdbd2cSJim Jagielski&apos; rounds a Real to a given Number of Decimals
314*b1cdbd2cSJim JagielskiFunction Round(BaseValue as Double, Decimals as Integer) as Double
315*b1cdbd2cSJim JagielskiDim Multiplicator as Long
316*b1cdbd2cSJim JagielskiDim DblValue#, RoundValue#
317*b1cdbd2cSJim Jagielski	Multiplicator = Power(10,Decimals)
318*b1cdbd2cSJim Jagielski	RoundValue = Int(BaseValue * Multiplicator)
319*b1cdbd2cSJim Jagielski	Round = RoundValue/Multiplicator
320*b1cdbd2cSJim JagielskiEnd Function
321*b1cdbd2cSJim Jagielski
322*b1cdbd2cSJim Jagielski
323*b1cdbd2cSJim Jagielski&apos;Retrieves the mere filename out of a whole path
324*b1cdbd2cSJim JagielskiFunction FileNameoutofPath(ByVal Path as String, Optional Separator as String) as String
325*b1cdbd2cSJim JagielskiDim i as Integer
326*b1cdbd2cSJim JagielskiDim SepList() as String
327*b1cdbd2cSJim Jagielski	If IsMissing(Separator) Then
328*b1cdbd2cSJim Jagielski		Path = ConvertFromUrl(Path)
329*b1cdbd2cSJim Jagielski		Separator = GetPathSeparator()
330*b1cdbd2cSJim Jagielski	End If
331*b1cdbd2cSJim Jagielski	SepList() = ArrayoutofString(Path, Separator,i)
332*b1cdbd2cSJim Jagielski	FileNameoutofPath = SepList(i)
333*b1cdbd2cSJim JagielskiEnd Function
334*b1cdbd2cSJim Jagielski
335*b1cdbd2cSJim Jagielski
336*b1cdbd2cSJim JagielskiFunction GetFileNameExtension(ByVal FileName as String)
337*b1cdbd2cSJim JagielskiDim MaxIndex as Integer
338*b1cdbd2cSJim JagielskiDim SepList() as String
339*b1cdbd2cSJim Jagielski	SepList() = ArrayoutofString(FileName,&quot;.&quot;, MaxIndex)
340*b1cdbd2cSJim Jagielski	GetFileNameExtension = SepList(MaxIndex)
341*b1cdbd2cSJim JagielskiEnd Function
342*b1cdbd2cSJim Jagielski
343*b1cdbd2cSJim Jagielski
344*b1cdbd2cSJim JagielskiFunction GetFileNameWithoutExtension(ByVal FileName as String, Optional Separator as String)
345*b1cdbd2cSJim JagielskiDim MaxIndex as Integer
346*b1cdbd2cSJim JagielskiDim SepList() as String
347*b1cdbd2cSJim Jagielski	If not IsMissing(Separator) Then
348*b1cdbd2cSJim Jagielski		FileName = FileNameoutofPath(FileName, Separator)
349*b1cdbd2cSJim Jagielski	End If
350*b1cdbd2cSJim Jagielski	SepList() = ArrayoutofString(FileName,&quot;.&quot;, MaxIndex)
351*b1cdbd2cSJim Jagielski	GetFileNameWithoutExtension = RTrimStr(FileName, &quot;.&quot; &amp; SepList(MaxIndex)
352*b1cdbd2cSJim JagielskiEnd Function
353*b1cdbd2cSJim Jagielski
354*b1cdbd2cSJim Jagielski
355*b1cdbd2cSJim JagielskiFunction DirectoryNameoutofPath(sPath as String, Separator as String) as String
356*b1cdbd2cSJim JagielskiDim LocFileName as String
357*b1cdbd2cSJim Jagielski	LocFileName = FileNameoutofPath(sPath, Separator)
358*b1cdbd2cSJim Jagielski	DirectoryNameoutofPath = RTrimStr(sPath, Separator &amp; LocFileName)
359*b1cdbd2cSJim JagielskiEnd Function
360*b1cdbd2cSJim Jagielski
361*b1cdbd2cSJim Jagielski
362*b1cdbd2cSJim JagielskiFunction CountCharsinString(BigString, LocChar as String, ByVal StartPos as Integer) as Integer
363*b1cdbd2cSJim JagielskiDim LocCount%, LocPos%
364*b1cdbd2cSJim Jagielski	LocCount = 0
365*b1cdbd2cSJim Jagielski	Do
366*b1cdbd2cSJim Jagielski		LocPos = Instr(StartPos,BigString,LocChar)
367*b1cdbd2cSJim Jagielski		If LocPos &lt;&gt; 0 Then
368*b1cdbd2cSJim Jagielski			LocCount = LocCount + 1
369*b1cdbd2cSJim Jagielski			StartPos = LocPos+1
370*b1cdbd2cSJim Jagielski		End If
371*b1cdbd2cSJim Jagielski	Loop until LocPos = 0
372*b1cdbd2cSJim Jagielski	CountCharsInString = LocCount
373*b1cdbd2cSJim JagielskiEnd Function
374*b1cdbd2cSJim Jagielski
375*b1cdbd2cSJim Jagielski
376*b1cdbd2cSJim JagielskiFunction BubbleSortList(ByVal SortList(),optional sort2ndValue as Boolean)
377*b1cdbd2cSJim Jagielski&apos;This function bubble sorts an array of maximum 2 dimensions.
378*b1cdbd2cSJim Jagielski&apos;The default sorting order is the first dimension
379*b1cdbd2cSJim Jagielski&apos;Only if sort2ndValue is True the second dimension is the relevant for the sorting order
380*b1cdbd2cSJim Jagielski	Dim s as Integer
381*b1cdbd2cSJim Jagielski	Dim t as Integer
382*b1cdbd2cSJim Jagielski	Dim i as Integer
383*b1cdbd2cSJim Jagielski	Dim k as Integer
384*b1cdbd2cSJim Jagielski	Dim dimensions as Integer
385*b1cdbd2cSJim Jagielski	Dim sortvalue as Integer
386*b1cdbd2cSJim Jagielski	Dim DisplayDummy
387*b1cdbd2cSJim Jagielski	dimensions = 2
388*b1cdbd2cSJim Jagielski
389*b1cdbd2cSJim JagielskiOn Local Error Goto No2ndDim
390*b1cdbd2cSJim Jagielski	k = Ubound(SortList(),2)
391*b1cdbd2cSJim Jagielski	No2ndDim:
392*b1cdbd2cSJim Jagielski	If Err &lt;&gt; 0 Then dimensions = 1
393*b1cdbd2cSJim Jagielski
394*b1cdbd2cSJim Jagielski	i = Ubound(SortList(),1)
395*b1cdbd2cSJim Jagielski	If ismissing(sort2ndValue) then
396*b1cdbd2cSJim Jagielski		sortvalue = 0
397*b1cdbd2cSJim Jagielski	else
398*b1cdbd2cSJim Jagielski		sortvalue = 1
399*b1cdbd2cSJim Jagielski	end if
400*b1cdbd2cSJim Jagielski
401*b1cdbd2cSJim Jagielski	For s = 1 to i - 1
402*b1cdbd2cSJim Jagielski		For t = 0 to i-s
403*b1cdbd2cSJim Jagielski			Select Case dimensions
404*b1cdbd2cSJim Jagielski			Case 1
405*b1cdbd2cSJim Jagielski				If SortList(t) &gt; SortList(t+1) Then
406*b1cdbd2cSJim Jagielski					DisplayDummy = SortList(t)
407*b1cdbd2cSJim Jagielski					SortList(t) = SortList(t+1)
408*b1cdbd2cSJim Jagielski					SortList(t+1) = DisplayDummy
409*b1cdbd2cSJim Jagielski				End If
410*b1cdbd2cSJim Jagielski			Case 2
411*b1cdbd2cSJim Jagielski				If SortList(t,sortvalue) &gt; SortList(t+1,sortvalue) Then
412*b1cdbd2cSJim Jagielski					For k = 0 to UBound(SortList(),2)
413*b1cdbd2cSJim Jagielski							DisplayDummy = SortList(t,k)
414*b1cdbd2cSJim Jagielski							SortList(t,k) = SortList(t+1,k)
415*b1cdbd2cSJim Jagielski							SortList(t+1,k) = DisplayDummy
416*b1cdbd2cSJim Jagielski					Next k
417*b1cdbd2cSJim Jagielski				End If
418*b1cdbd2cSJim Jagielski			End Select
419*b1cdbd2cSJim Jagielski		Next t
420*b1cdbd2cSJim Jagielski	Next s
421*b1cdbd2cSJim Jagielski	BubbleSortList = SortList()
422*b1cdbd2cSJim JagielskiEnd Function
423*b1cdbd2cSJim Jagielski
424*b1cdbd2cSJim Jagielski
425*b1cdbd2cSJim JagielskiFunction GetValueoutofList(SearchValue, BigList(), iDim as Integer, Optional ValueIndex)
426*b1cdbd2cSJim JagielskiDim i as Integer
427*b1cdbd2cSJim JagielskiDim MaxIndex as Integer
428*b1cdbd2cSJim Jagielski	MaxIndex = Ubound(BigList(),1)
429*b1cdbd2cSJim Jagielski	For i = 0 To MaxIndex
430*b1cdbd2cSJim Jagielski		If BigList(i,0) = SearchValue Then
431*b1cdbd2cSJim Jagielski			If Not IsMissing(ValueIndex) Then
432*b1cdbd2cSJim Jagielski				ValueIndex = i
433*b1cdbd2cSJim Jagielski			End If
434*b1cdbd2cSJim Jagielski			GetValueOutOfList() = BigList(i,iDim)
435*b1cdbd2cSJim Jagielski		End If
436*b1cdbd2cSJim Jagielski	Next i
437*b1cdbd2cSJim JagielskiEnd Function
438*b1cdbd2cSJim Jagielski
439*b1cdbd2cSJim Jagielski
440*b1cdbd2cSJim JagielskiFunction AddListtoList(ByVal FirstArray(), ByVal SecondArray(), Optional StartIndex)
441*b1cdbd2cSJim JagielskiDim n as Integer
442*b1cdbd2cSJim JagielskiDim m as Integer
443*b1cdbd2cSJim JagielskiDim MaxIndex as Integer
444*b1cdbd2cSJim Jagielski	MaxIndex = Ubound(FirstArray()) + Ubound(SecondArray()) + 1
445*b1cdbd2cSJim Jagielski	If MaxIndex &gt; -1 Then
446*b1cdbd2cSJim Jagielski		Dim ResultArray(MaxIndex)
447*b1cdbd2cSJim Jagielski		For m = 0 To Ubound(FirstArray())
448*b1cdbd2cSJim Jagielski			ResultArray(m) = FirstArray(m)
449*b1cdbd2cSJim Jagielski		Next m
450*b1cdbd2cSJim Jagielski		For n = 0 To Ubound(SecondArray())
451*b1cdbd2cSJim Jagielski			ResultArray(m) = SecondArray(n)
452*b1cdbd2cSJim Jagielski			m = m + 1
453*b1cdbd2cSJim Jagielski		Next n
454*b1cdbd2cSJim Jagielski		AddListToList() = ResultArray()
455*b1cdbd2cSJim Jagielski	Else
456*b1cdbd2cSJim Jagielski		Dim NullArray()
457*b1cdbd2cSJim Jagielski		AddListToList() = NullArray()
458*b1cdbd2cSJim Jagielski	End If
459*b1cdbd2cSJim JagielskiEnd Function
460*b1cdbd2cSJim Jagielski
461*b1cdbd2cSJim Jagielski
462*b1cdbd2cSJim JagielskiFunction CheckDouble(DoubleString as String)
463*b1cdbd2cSJim JagielskiOn Local Error Goto WRONGDATATYPE
464*b1cdbd2cSJim Jagielski	CheckDouble() = CDbl(DoubleString)
465*b1cdbd2cSJim JagielskiWRONGDATATYPE:
466*b1cdbd2cSJim Jagielski	If Err &lt;&gt; 0 Then
467*b1cdbd2cSJim Jagielski		CheckDouble() = 0
468*b1cdbd2cSJim Jagielski		Resume NoErr:
469*b1cdbd2cSJim Jagielski	End If
470*b1cdbd2cSJim JagielskiNOERR:
471*b1cdbd2cSJim JagielskiEnd Function
472*b1cdbd2cSJim Jagielski</script:module>
473