LoginSignup
10
9

More than 5 years have passed since last update.

PowerShell で文字・文字列を書き換える便利関数

Posted at

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> 

ほげーヾ(๑╹◡╹)ノ

10
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
9