如何在 powershell 中用特定字符替换项目的字符?

How can I replace a character of a item with a specific character in powershell?

我有一个名为 $Map 的数组,它有 29 个字符串,每行 23 个字符。使用 $CharY 变量指定项目的索引,使用 $CharX 变量指定应替换该项目的哪个字符。我如何实际用字符“0”替换项目的这个字符?我尝试使用 $Map[$CharY][CharX] 但在 运行 这个命令之后,显示错误

At line:1 char:1
+ $Map[$CharY][$CharX] = "0"
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
    + FullyQualifiedErrorId : CannotIndex
PowerShell 使用的

.NET strings 不可变的 。您可以通过索引读取单个字符,但不能直接修改它。相反,使用修改后的字符创建一个新字符串并将其分配回数组:

$Map = 1..29 | ForEach-Object { '1' * 23 }
$CharY = 1
$CharX = 2

$Line = $Map[$CharY].ToCharArray()
$Line[$CharX] = '0'
$Map[$CharY] = -join $Line

$Map

输出:

11111111111111111111111
11011111111111111111111
... [remaining lines omitted] ...

说明:

  • 第一行填充 $Map 29 个字符串,每个字符串由 23 个字符组成。
  • String.ToCharArray()用于将字符串转换为可以修改的字符数组
  • 可以使用 -join operator is used to create a new string from the individual characters. Alternatively the String constructor that accepts a char array 的一元形式:[String]::new($Line)