Time to read: ~ 3 minutes
It’s been a while…
…since I’ve written a blog post and there’s no better way to get back into something than to just start doing. Even if it’s just a throwaway, little post.
So here’s mine. Hope you enjoy it.
Don’t ask why…
… but recently I was trying in PowerShell to split a string up into its individual characters. So, as an example, ‘SQL Server’ would become the
('S', 'Q', 'L', ' ', 'S', 'e', 'r', 'v', 'e', 'r') collection of characters.
I also wanted the character before it and after it as well…
|This Char||Prev Char||Next Char|
The Easiest Way…
…that I found was to simply ask for the character a certain position (or index) in the string.
As you can see we had to add a little got’cha to our code:
($i +1) % $String.Length
This is because, without the modulo operator (what remains when we divide the numbers), PowerShell looks for the next index (10) and returns nothing since there is essentially nothing in index 10.
So we ask PowerShell what 10 modulo the length of the string is ( 10 % 10) and the remainder is 0. This way we can wrap back around to the start again!
However, coming from a database background…
…this may seem like a pretty simple exercise, especially since we know that PowerShell has a Substring method.
However, what happens when we try and go backwards i.e.
Exception calling “Substring” with “2” argument(s): “StartIndex cannot be less than zero.
Try as I might…
…I couldn’t get any way that used “.whatever()” to work. Substring; nope, Chars; nada.
The moment that I passed in a -1 I just saw a sea of red.
Thankfully I’ve been frequenting the PowerShell slack channel lately and they were able to let me know why.
sifb [Nov 12th at 10:01 PM]
@Shane O’Neill I think the $array[-1] loop-around is a powershell convenience, and doesn’t exist in C# / the lower level .Net libraries
So there we go…
…even though we may be used to SubString, it doesn’t mean that it is the best way for us to go. This is technically a new language and there are going to be tips and tricks for doing things that we don’t yet know about!
Half the fun is rooting them out, finding them, and slowly, slowly watching your code improve and knowing why.
I would have written a shorter [post], but I did not have the time.