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