|
saet Apprentice
Joined: 12 Jun 2006 Posts: 106
|
Posted: Mon Jul 31, 2006 3:31 pm
%right, %rightback |
Noticed this while in zMUD and confirmed that it's also on CMUD.
%right and %rightback have the exact same help, saying they both return the right most N characters of the string.
%right does what %leftback does(except from the other side obviously!).
%rightback does what %left does.
>#SHOW %left("ABCDEFGH", 2)
AB
>#SHOW %leftback("ABCDEFGH", 2)
ABCDEF
>#SHOW %right("ABCDEFGH", 2)
CDEFGH
>#SHOW %rightback("ABCDEFGH", 2)
GH |
|
|
|
shalimar GURU
Joined: 04 Aug 2002 Posts: 4692 Location: Pensacola, FL, USA
|
Posted: Mon Jul 31, 2006 10:02 pm |
Shouldnt right and rightback be swapped?
Since in the example above, %left only returns 2 charecters, so should %right, instead it shows the other 6. |
|
_________________ Discord: Shalimarwildcat |
|
|
|
edb6377 Magician
Joined: 29 Nov 2005 Posts: 482
|
Posted: Mon Jul 31, 2006 10:08 pm |
Yeah that would be my impression plus it makes more sense to me that way than the other way
|
|
_________________ Confucious say "Bugs in Programs need Hammer" |
|
|
|
saet Apprentice
Joined: 12 Jun 2006 Posts: 106
|
Posted: Tue Aug 01, 2006 12:31 am |
I guess I forgot to mention that. My subject could have been a little more informative.
Btw, am I the first person to use %right and %rightback? |
|
|
|
MattLofton GURU
Joined: 23 Dec 2000 Posts: 4834 Location: USA
|
Posted: Tue Aug 01, 2006 3:26 am |
Hardly.
|
|
_________________ EDIT: I didn't like my old signature |
|
|
|
edb6377 Magician
Joined: 29 Nov 2005 Posts: 482
|
Posted: Tue Aug 01, 2006 8:57 am |
Matt :)
I just learned to use them the way they were when i needed them. Didnt ever look at either of them close enough to really discern the situation. It should be changed. Usually when i looked it up i didnt have both going at once however and is most likely the reason I would have missed it. |
|
_________________ Confucious say "Bugs in Programs need Hammer" |
|
|
|
MattLofton GURU
Joined: 23 Dec 2000 Posts: 4834 Location: USA
|
Posted: Tue Aug 01, 2006 9:47 pm |
Well, Zmud, CMud, and apparently even Zugg's style of programming doesn't have (a use for) a MID function, so any attempt to get at a mid-string portion of text will necessarily have to use at least two of the various %left/%right functions.
This was perhaps one of the most jarring differences in ZMud I had to get used to as an almost-exclusively BASIC coder. |
|
_________________ EDIT: I didn't like my old signature |
|
|
|
Zugg MASTER
Joined: 25 Sep 2000 Posts: 23379 Location: Colorado, USA
|
Posted: Tue Aug 01, 2006 10:09 pm |
Well, for people interested in the history of these functions, they came from the Lotus Notes scripting language. They had the left, leftback, right, and rightback functions as they are defined in zMUD. Back when zMUD was written, I was heavily into Notes programming, so several ideas came from there. Keep in mind that when zMUD was created, stuff like PHP didn't even exist! Yeah, it was a long time ago. But I'm afraid we are stuck with it. I can add *new* functions, but I'm not going to change how existing functions work because of zMUD compatibility issues.
I think the solution is to probably add a %mid or %substr function to CMUD. Then people won't need to mess with %left/%right.
At some point during the CMUD work, I'll probably go through my PHP manual and add more PHP-like functions anyway. |
|
|
|
Vijilante SubAdmin
Joined: 18 Nov 2001 Posts: 5182
|
Posted: Tue Aug 01, 2006 11:14 pm |
We already have %copy which is the Pascal name for the Basic 'mid' and C 'substr'. The benefits of the *back functions are that you don't need the extra use of the 'len' function. Processing wise it likely makes little difference, but the script looks a bit cleaner. I am sorry I didn't quite get the help totally clear on them, but they do function as intended. It is just a little confusing at times.
|
|
_________________ The only good questions are the ones we have never answered before.
Search the Forums |
|
|
|
Rainchild Wizard
Joined: 10 Oct 2000 Posts: 1551 Location: Australia
|
Posted: Wed Aug 02, 2006 6:59 am |
You could always (if it isn't already) make 'len' an optional parameter, if you do not specify a length, then it assumes 'everything after this' - means you can use %substr( ) as a left, right, or a mid.
eg
%substr( "abcdef", 1, 2 ) = "ab"
%substr( "abcdef", 3, 2 ) = "cd"
%substr( "abcdef", 5, 2 ) = "ef"
%substr( "abcdef", 1, 3 ) = "abc"
%substr( "abcdef", 4 ) = "def"
That should be powerful enough for any breaking apart that you need to do.
Currently %copy( "abcdef", 4 ) just returns a null string, so doesn't quite work as above, all the other examples work correctly. |
|
|
|
Kiasyn Apprentice
Joined: 05 Dec 2004 Posts: 196 Location: New Zealand
|
Posted: Wed Aug 02, 2006 8:43 am |
a %numletters and %letter would be nice too =]
|
|
|
|
Zugg MASTER
Joined: 25 Sep 2000 Posts: 23379 Location: Colorado, USA
|
Posted: Wed Aug 02, 2006 12:47 pm |
Kiasyn, could you be more specific about what you want the functions you mentioned to do?
Vijilante, yes, you are correct that %copy comes from the Pascal stuff. But Rainchild is correct that it should handle certain situations a bit cleaner. |
|
|
|
Rainchild Wizard
Joined: 10 Oct 2000 Posts: 1551 Location: Australia
|
Posted: Wed Aug 02, 2006 11:24 pm |
To me, %numletters( ) sounds like the existing %len( ) function and %letter( ) sounds like return the character at a position, eg %letter( "abcdef", 3 ) = "c"
I wonder, is there a way to use something like
#VAR test "abcdef"
#SH @test[3]
>> "c"
#VAR test[3] "x"
#SH @test
>> "abxdef"
... I don't really have a current demand for that, but I might use it if it was there hehe. |
|
|
|
Zugg MASTER
Joined: 25 Sep 2000 Posts: 23379 Location: Colorado, USA
|
Posted: Wed Aug 02, 2006 11:59 pm |
Rather than invent a new syntax, *if* I added something like this, the syntax would be more like other array/db references and would be something like this:
Code: |
#VAR test "abcdef"
#SH @test.3
>> c
#VAR test.3 "x"
#SH @test
>> abxdef |
This is the same syntax used for elements in a string list and for arrays, so it seems like it might make sense to work on a normal string. Not promising anything, just thinking out loud again. |
|
|
|
Kiasyn Apprentice
Joined: 05 Dec 2004 Posts: 196 Location: New Zealand
|
Posted: Thu Aug 03, 2006 5:37 am |
Kiasyn wrote: |
a %numletters and %letter would be nice too =] |
blah = "whee test string"
#LOOP %numletters(@blah) {#if (%letter(@blah,%i) == 'e') {burp}}
etc :P |
|
|
|
Rainchild Wizard
Joined: 10 Oct 2000 Posts: 1551 Location: Australia
|
Posted: Thu Aug 03, 2006 6:26 am |
You could currently do this with:
#VAR blah "whee test string"
#LOOP %len(@blah) {#IF (%copy(@blah,%i,1)=="e") {burp}}
But admittedly you have to specify the final '1' as part of the %copy function, and %copy is a weird name for it ;) |
|
|
|
Larkin Wizard
Joined: 25 Mar 2003 Posts: 1113 Location: USA
|
Posted: Thu Aug 03, 2006 10:56 am |
You can already achieve that same sort of thing with %len and %copy. I don't see the need for new functions.
|
|
|
|
|
|