# encoding: ascii # api: powershell # title: Split-String # description: Splits a string (by default, on whitespace), and allows you to pick and chose which pieces are returned. Something like “cut” in bash… # version: 0.1 # type: function # license: CC0 # function: Split-String # x-poshcode-id: 895 # x-archived: 2010-05-15T14:42:44 # # function Split-String { #.Synopsis # Split a string and execute a scriptblock to give access to the pieces #.Description # Splits a string (by default, on whitespace), and assigns it to $0, and the first 9 words to $1 through $9 ... and then calls the specified scriptblock #.Example # echo "this is one test ff-ff-00 a crazy" | split {$2, $1.ToUpper(), $6, $4, "?"} # # outputs 5 strings: is, THIS, a, test, ? # #.Example # echo "this is one test ff-ff-00 a crazy" | split {$0[-1]} # # outputs the last word in the string: "crazy" # #.Parameter pattern # The regular expression to split on. By default "\s+" (any number of whitespace characters) #.Parameter action # The scriptblock to execute. By default {$0} which returns the whole split array #.Parameter InputObject # The string to split [CmdletBinding(DefaultParameterSetName="DefaultSplit")] Param( [Parameter(Position=0, ParameterSetName="SpecifiedSplit")] [string]$pattern="\s+" , [Parameter(Position=0,ParameterSetName="DefaultSplit")] [Parameter(Position=1,ParameterSetName="SpecifiedSplit")] [ScriptBlock]$action={$0} , [Parameter(Mandatory=$true, ValueFromPipeline=$true)] [string]$InputObject ) BEGIN { if(!$pattern){[regex]$re="\s+"}else{[regex]$re=$pattern} } PROCESS { $0 = $re.Split($InputObject) $1,$2,$3,$4,$5,$6,$7,$8,$9,$n = $0 &$action } } # #This one is v1-compatible # function Split-String { # Param([scriptblock]$action={$0},[regex]$split=" ") # PROCESS { # if($_){ # $0 = $split.Split($_) # $1,$2,$3,$4,$5,$6,$7,$8,$9,$n = $0 # &$action # } # } # }