PowerShell を使っていて、文字列をゴニョゴニョしたくなること、あると思います。
私の場合は特に「ある文字列の i 番目の文字を c に書き換えたい」「ある文字列の i 番目からの文字列を s で書き換えたい」というような事がしたかったのです。
残念なことに、.NET にはそういうのが無く、PowerShell 独自の関数としても見つけられなかったので、ちゃちゃっと書いてみました。
Rewrite.ps1
function rewriteCharAt {
param(
[int]$index,
[char]$value,
[Parameter(ValueFromPipeline=$true, Mandatory=$true)][string[]]$target
)
process {
foreach ($s in $target) {
$s.Substring(0, $index) + $value.ToString() + $s.SubString($index + 1)
}
}
}
function rewriteStringAt {
param(
[int]$index,
[string]$value,
[Parameter(ValueFromPipeline=$true, Mandatory=$true)][string[]]$target
)
process {
foreach ($s in $target) {
$s.Substring(0, $index) + $value + $s.Substring($index + $value.Length)
}
}
}
エラー処理とかはしていないので、インデックスの指定を間違えたりするとお察しです。
この関数は書き換えたい元の文字列をパイプラインで受け取ることができるので、こんな風に使えます。
Usage.ps1
PS C:\home> "This is a pen." |
>> rewriteStringAt 0 "That" |
>> rewriteCharAt 13 "!"
>>
That is a pen!
PS C:\home>
ほげーヾ(๑╹◡╹)ノ