Monkey equivalent to Blitz3D Mid$() command.
Monkey Forums/Monkey Code/Monkey equivalent to Blitz3D Mid$() command.
| ||
I couldn't seem to find an equivalent to the Blitz3D Mid$() command, unless I've missed it somewhere; so I made my own. It has only been tested on the HTML5 target so far, but seems to be working fine in that case. [edit]I have now tested it in GLFW too, seems good so far.[/edit] Function Mid:String(inString:String, startPos:Int, charCount:Int) Local stringArray:String[] = inString.Split("") Local outAsc:String = "" Local i:int Local startPosFlag:Bool Local charCountFlag:Bool If startPos > 0 And startPos <= inString.Length() startPosFlag = True Else startPosFlag = False EndIf If charCount > 0 And charCount <= inString.Length() - (startPos - 1) charCountFlag = True Else charCountFlag = False EndIf If startPosFlag = True And charCountFlag = True For i = startPos To startPos + (charCount - 1) outAsc += stringArray[i - 1] Next EndIf If startPosFlag = False outAsc = "Error! startPos out of range" EndIf If charCountFlag = False outAsc = "Error! charCount out of range" EndIf If startPosFlag = False And charCountFlag = False outAsc = "Error! startPos and charCount out of range" EndIf Return outAsc End |
| ||
That's a bit long-winded for something simple...Function Mid:String( str:String, pos:Int, size:Int = -1 ) 'if aiming to emulate a starting index of 1, uncomment the next line 'pos -= 1 If size = -1 Then Return str[pos..] Return str[pos..pos + size] End |
| ||
Ahh!, but the more long winded, the more I get to experiment. ;) |
| ||
Here's a modified version, based on the code snippet that Goodlookinguy provided above but with error trapping, thanks for pointing out that handy feature. ;)Function Mid:String(inString:String, startPos:Int, charCount:Int) Local outAsc:String Local i:int Local startPosFlag:Bool Local charCountFlag:Bool If startPos > 0 And startPos <= inString.Length() startPosFlag = True Else startPosFlag = False EndIf If charCount > 0 And charCount <= inString.Length() - (startPos - 1) charCountFlag = True Else charCountFlag = False EndIf If startPosFlag = True And charCountFlag = True outAsc = inString[startPos - 1 .. startPos + charCount - 1] EndIf If startPosFlag = False outAsc = "Error! startPos out of range" EndIf If charCountFlag = False outAsc = "Error! charCount out of range" EndIf If startPosFlag = False And charCountFlag = False outAsc = "Error! startPos and charCount out of range" EndIf Return outAsc End |
| ||
You're making it too hard on yourself. Here, I've cleaned up your code a bit. Also, people don't like code that doesn't nicely catch problems. This doesn't nicely catch problems. It changes the text they input into other text completely if there's a problem. Just a thought. |
| ||
I've been out of the programming scene for quite a few months, due to losing my dad a little while back, so I do tend to go the long way around with my coding at the moment. Thank you for sorting out this code snippet, you've been a great help. ;) |