Code archives/Miscellaneous/More String Functons
This code has been declared by its author to be Public Domain code.
Download source code
| |||||
| -Note- STRING FUNCTIONS ARE ALWAYS SLOW Whilst I've done my best to optimise them some whilst maintaining and easily understandable/modifiable format, these functions may cause conosiderable slowdown through repeated use. It is recommended that steps are taken to limit the generation ofstrings, rather than rely on converting them afterwards etcd. This will make a lot less work in the long run :) Also, be aware that (some Blitz relaterd issue) Lower$() is significantly slower than Upper$() irrespective of the length of the string or case of the members of the string. Therefore, where possible, I have used Upper() to check cases, I recommend this practise to others too if the case has not been forced on generation. Finally, "MatchCase", "ProperString" and "PurifyString" arte quite basic. There will be few problems such as with proper nouns or (very likely) foreign characters, 'm aware of this, but will likely never update the functions here. They were not designed to be an all encompassing perfect solution, just a useful addition for general purposes. MatchCase$() - Matches the case of One String to another PaddedNumberString$() - Displays an integer value as a string padded to the left with 0's ReadByteString$() - Reads a string from a poiint in a file or stream Parenthesise$() - Enclose text in parenthesis EnQuote$() - Enclose text in quotation marks TrimStringLeft$() - Removes a number of characters from the left (beginning) of a string TrimStringRight$() - Removes a number of characters from the right (end) of a string TrimMidString$() - Removes a number of charactersd from the middle of a string ProperString$() - Applies a simplified grammatical case structure to a string PurifyString$() Removes non-alphanumeric characters from a string IsValidAlphanumericCharacter%() - Combines the two functions below IsNumericChar%() - Returns True if character is 0-9 IsAlphaCharacter%() - Returns true for a-Z | |||||
Function MatchCase$(MatchString$,TextString$)
If (Upper(MatchString$)=MatchString$) Then Return Upper(TextString$)
If (Lower(MatchString$)=MatchString) Then Return Lower(TextString$)
If MatchString$=(ProperString$(MatchString$)) Then TextString$=ProperString$(TextString$)
Return TextString$
End Function
Function PaddedNumberString$(Value%,Digits%)
Local Padding$=""
Local IterByte
For IterByte=1 To Digits
Padding$=Padding$+"0"
Next
Local ReturnString$=Padding$+Str(Value%)
Return Right$(ReturnString$,Digits%)
End Function
Function ReadByteString$(file%, nCount% = False)
Local sReturnString$ = ""
Local Char%
Local IterByte%
If (Not(nCount%))
Char% = ReadByte(file)
While (Char%)
sReturnString$ = sReturnString$ + Chr(Char)
Char% = ReadByte(file)
Wend
Else
For IterByte% = 1 To nCount%
sReturnString$ = sReturnString$ + Chr(ReadByte(file))
Next
EndIf
Return sReturnString$
End Function
Function Parenthesise$(TextString$)
If ((Left(TextString,1)="("))
While (Left(TextString,1)="(")
TextString=TrimStringLeft(TextString,1)
Wend
End If
If ((Right(TextString,1)="("))
While (Right(TextString,1)=")")
TextString=TrimStringRight$(TextString,1)
Wend
End If
Return "("+TextString$+")"
End Function
Function EnQuote$(TextString$)
If ((Left(TextString,1)=Chr(34)))
While (Left(TextString,1)=Chr(34))
TextString=TrimStringLeft(TextString,1)
Wend
End If
If ((Right(TextString,1)=Chr(34)))
While (Right(TextString,1)=Chr(34))
TextString=TrimStringRight(TextString,1)
Wend
End If
Return Chr(34)+TextString$+Chr(34)
End Function
Function TrimStringLeft$(sString$,nChars%)
If (sString$="") Then Return ""
If (Not(nChars%)) Then Return sString$
Local nLength%=Len(sString$)
If (nLength%<=nChars%) Then Return ""
Return (Right$(sString$,nLength%-nChars%))
End Function
Function TrimStringRight$(sString$,nChars%)
If (sString$="") Then Return ""
If (Not(nChars)) Then Return sString$
Local nLength%=Len(sString$)
If (nLength<=nChars) Then Return ""
Return (Left$(sString$,nLength%-nChars))
End Function
Function TrimMidString$(sString$,nFrom%,nChars%)
If (sString$="")Then Return ""
If ((nFrom%)<2) Then nFrom%=1
Local nLength%=Len(sString$)
If (nLength%<nFrom)Then Return sString$
If (nLength%<(nFrom+nChars)) Then nChars%=(nLength%-nFrom%)
If (Not (nChars%)) Then Return sString$
Local nTo%=nChars%+nFrom%
If (nTo%>nLength%) Then nTo=nLength%
Local sReturn$=Right(sString$,nLength%-nTo%)
If (nFrom%>1) Then sReturn$=Left(sString$,nFrom%-1)+sReturn$
Return sReturn$
End Function
Function ProperString$(sString$)
If (sString="") Then Return ""
Local nLength%=Len(sString)
If nLength=1 Then Return Upper(sString)
Local sIterate$, sAdd$
Local nChar%
Local Mode%=False
sIterate=Upper$(Left(sString,1))
For nChar=2 To nLength
sAdd$=Mid(sString,nChar,1)
If (Mode)
sAdd=Upper(sAdd)
If (IsValidAlphanumericCharacter(sAdd))
Mode=(False)
End If
Else
sAdd=Lower(sAdd)
If (sAdd="." Or sAdd=Chr(34) Or sAdd="!" Or sAdd="&" Or sAdd="*" Or sAdd="?")
Mode=True
Else
If (nChar<nLength)
If ((sAdd="i") Or (sAdd="o"))
If (IsValidAlphanumericCharacter(Mid(sString,nChar+1,1))=False) And (IsValidAlphanumericCharacter(Mid(sString,nChar-1,1))=False) Then sAdd=Upper(sAdd)
End If
End If
End If
End If
sIterate=sIterate+sAdd
Next
Return sIterate$
End Function
Function PurifyString$(sString$,nAllowNumbers%=True,nAllowSpace%=True)
If (Len(sString)<1) Then Return ""
Local nIterChar%
Local sChar$
Local sReturn$
If (Not(nAllowSpace)) Then sString$=Replace(sString," ","")
For nIterChar=1 To Len(sString$)
sAdd$=Mid(sString,nIterChar,1)
If (Not(IsAlphaCharacter(sAdd) ))
If (IsNumericCharacter(sAdd)|
If (nAllowNumbers))
sReturn$=sReturn$+sAdd$
End If
End If
Else
sReturn$=sReturn$+sAdd$
End If
Next
End If
Local sReturn$
End Function
Function IsAlphanumericCharacter%(sChar$)
Return ( IsNumericChar(Left(sChar,1)) + IsAlphaCharacter(Left(sChar,1)) )
End Function
Function IsNumericChar%(sChar$)
If (sChar="") Then Return False
Return ( (Left(sChar,1)>="0") * (Left(sChar,1)<="9") )
End Function
Function IsAlphaCharacter%(sChar$)
If (sChar="") Then Return False
Return ( ( (Upper(Left(sChar,1))>="A")*(Upper(Left(sChar,1))<="Z") ))
End Function |
Comments
None.
Code Archives Forum