Powershell 5.x
Есть строка $s
, длиной примерно 2,5 КБ.Мне нужно выполнить серию замен (около 20) на нем, в цикле.Всего есть несколько 800K
строк, поэтому мне нужно, чтобы это было fast .Для каждой замены я знаю позицию [int] $x
и новое значение [string] $ns
.
. Пример: мы начинаем с $s == "abcdefghijklmn"
, а $x (position)
равен 3, а новое значение, которое нужно поставить, равно $ns == "XYZ"
В итоге получаем $s == "abcXYZghijklmn"
(строки индексируются на основе 0)
Мое решение на данный момент:
$s = "abcdefghijklmn"
$ns = "XYZ"
$x = 3
$s = $s.Remove($x, $ns.Length).Insert($x, $ns)
Это как минимум три операции: удаление строки, затем вставкановая строка и, наконец, сохранение конечного результата (не уверен насчет внутренних функций здесь, но я предполагаю, что так все и работает).Для строк по 800 КБ по 2,5 КБ каждая мы говорим о ~ 2 ГБ данных, обрабатываемых три раз в памяти.Это не самый эффективный способ работы.
В Python, с MutableString, я могу выполнять замену на месте с минимальными затратами.Существует ли подобное в Powershell?