Powershell has clever ways to create an empty string or string array that can then be increased in size. And then I need a fixed length empty string. Why? I need to create a file where each line is composed by fields which are position dependent. So I need to pad between the fields with blank spaces.
After searching for quite a while I found Ethan's reply on the bottom of thread on limiting a string to N characters. And it was so obvious I had to smack me on the head: if you want to create a string called moo that contains nothing but 24 spaces, you can do it by typing
PS C:\> $moo = " "*24 PS C:\> $moo.length PS C:\> 24
So let's do something useful with that then!
So the plan is to write a function that given the string that will be used in a given field and the field size, it will return a properly padded string. Now, I think we should also create a second function whose only goal in life is to create a string with N blank spaces. And then the other function can call this. Reason I propose this is in case we need to provide some extra blank spaces because the format of this file might be, well, rather silly. Planning ahead is always a smart move. So, we start with our blank string generating function, which will look very similar to the $moo example above:
function BlankString($size) { return " "*$size }
If we want to test that we can modify the moo example
$moo = BlankString(24) $moo.length
Which should return 24 as before. So far so good. Now let's create a function that will return a properly padded field. Something like
function PadString($name, $stringSize) { if($name.length -lt $stringSize) { $name += BlankString ($stringSize - $name.length) } return $name }
looks like a good starting place. Let's try it out:
$noo = PadString "My Head hurts" 48 DebugLine "[$noo]" $noo.length
Results in
[My Head hurts ] 48
If you are curious, my DebugLine function looks like this
function DebugLine($OutputMessage) { Write-Host $OutputMessage -foregroundcolor red -backgroundcolor yellow }
The [ and ] are there just so we can see where the string, blank spaces included, begins and ends. If you do not like those characters, change them to something more remarkable, say ---> and <---
Now, what if the string we are trying to put in this new string is bigger than it can handle? This would be the opposite of padding the new string: we need to chop it. So, we modify our PadString function a bit:
function PadString($name, $stringSize) { if($name.length -lt $stringSize) { $name += BlankString ($stringSize - $name.length) } else { $name = $name.Substring(0, $stringSize) } return $name }
So, if we redo the same test we did before, but this time we make our resulting string shorter,
$noo = PadString "My Head hurts" 8 DebugLine "[$noo]" $noo.length
the result is now truncated
[My Head ] 8
And we can still create weird blank spaces using BlankString as needed to meet the file format requirments.
No comments:
Post a Comment