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