Several people have blogged about using the Google charts api from PowerShell, but everyone seems to be using the “simple” numerical encoding, so I figured that as the first step of my own google chart api wrapper module I would start out by writing up a simple encoder. I’m not posting this to the script repository until I’m done with it — this is just the number encoding function.
But I figured I’d blog it here in case it will help anyone else write the full wrapper module “for” me before I get around to it In any case, remember this doesn’t encode numbers higher than 4095, so if you have a bunch of numbers and some of them might be larger than that, you’ll still need to normalize them so they are within that range. I’ll post the function to normalize a series of numbers later this evening, because for some reason I can’t find it right now, but I’m sure I already wrote it
.
## Google Chart API extended value encoding function
#########################################################################
function GoogleEncode {
BEGIN {
## Google's odydecody is a 64 character array
$ody = "A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q",
"R","S","T","U","V","W","X","Y","Z","a","b","c","d","e","f","g","h","i","j",
"k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","0","1","2",
"3","4","5","6","7","8","9","-","."
## The actual filter function
filter encode {
# we have a hard-coded "overflow" value
if($_ -ge ($ody.Count * $ody.Count) ) { return "__" }
$y = -1 # $y is a ref variable, so it has to be defined
$x = [Math]::DivRem( $_, $ody.Count, [ref]$y )
return "$($ody[$x])$($ody[$y])"
}
## Handle numbers as parameters
foreach($i in $args) {
$i | encode
}
}
## Or handle numbers from the pipeline. We don't care :-)
PROCESS {
if($_ -ne $null) { $_ | encode }
}
}
That’s the whole thing … it’s really only about three lines of code (including the definition of $ody), but the rest is necessary to make it handle parameters or pipeline values.