79 lines
1.9 KiB
Text
79 lines
1.9 KiB
Text
function Select-NumberFromString
|
|
{
|
|
[CmdletBinding(DefaultParameterSetName="Decimal")]
|
|
[OutputType([PSCustomObject])]
|
|
Param
|
|
(
|
|
[Parameter(Mandatory=$true,
|
|
ValueFromPipeline=$true,
|
|
ValueFromPipelineByPropertyName=$true,
|
|
Position=0)]
|
|
[string]
|
|
$InputObject,
|
|
|
|
[Parameter(ParameterSetName="Decimal")]
|
|
[Alias("d","Dec")]
|
|
[switch]
|
|
$Decimal,
|
|
|
|
[Parameter(ParameterSetName="Hexadecimal")]
|
|
[Alias("h","Hex")]
|
|
[switch]
|
|
$Hexadecimal,
|
|
|
|
[Parameter(ParameterSetName="Octal")]
|
|
[Alias("o","Oct")]
|
|
[switch]
|
|
$Octal,
|
|
|
|
[Parameter(ParameterSetName="Binary")]
|
|
[Alias("b","Bin")]
|
|
[switch]
|
|
$Binary
|
|
)
|
|
|
|
Begin
|
|
{
|
|
switch ($PSCmdlet.ParameterSetName)
|
|
{
|
|
"Decimal" {$base = 10; $pattern = '[+-]?\b[0-9]+\b'; break}
|
|
"Hexadecimal" {$base = 16; $pattern = '\b[0-9A-F]+\b' ; break}
|
|
"Octal" {$base = 8; $pattern = '\b[0-7]+\b' ; break}
|
|
"Binary" {$base = 2; $pattern = '\b[01]+\b' ; break}
|
|
"Default" {$base = 10; $pattern = '[+-]?\b[0-9]+\b'; break}
|
|
}
|
|
}
|
|
Process
|
|
{
|
|
foreach ($object in $InputObject)
|
|
{
|
|
if ($object -match $pattern)
|
|
{
|
|
$string = $Matches[0]
|
|
}
|
|
else
|
|
{
|
|
$string = $null
|
|
}
|
|
|
|
|
|
try
|
|
{
|
|
$value = [Convert]::ToInt32($string, $base)
|
|
}
|
|
catch
|
|
{
|
|
$value = $null
|
|
}
|
|
|
|
[PSCustomObject]@{
|
|
Number = $value
|
|
String = $string
|
|
Base = $base
|
|
IsNumber = $value -is [int]
|
|
InputString = $object
|
|
}
|
|
|
|
}
|
|
}
|
|
}
|