30 lines
760 B
Plaintext
30 lines
760 B
Plaintext
function Split-String ([string]$String, [char]$Separator, [char]$Escape)
|
|
{
|
|
if ($String -notmatch "\$Separator|\$Escape") {return $String}
|
|
|
|
[bool]$escaping = $false
|
|
[string]$output = ""
|
|
|
|
for ($i = 0; $i -lt $String.Length; $i++)
|
|
{
|
|
[char]$character = $String.Substring($i,1)
|
|
|
|
if ($escaping)
|
|
{
|
|
$output += $character
|
|
$escaping = $false
|
|
}
|
|
else
|
|
{
|
|
switch ($character)
|
|
{
|
|
{$_ -eq $Separator} {$output; $output = ""; break}
|
|
{$_ -eq $Escape} {$escaping = $true ; break}
|
|
Default {$output += $character}
|
|
}
|
|
}
|
|
}
|
|
|
|
if ($String[-1] -eq $Separator) {[String]::Empty}
|
|
}
|