@Habarovchanin
Свободный художник

Как через powershell изменить строку в файле (массиве) в соответствии с заданным условием и вернуть её?

Условный файл (массив) содержит такие строки:
string 1 with 能\ char
string 2 with \ 能\ char
string 3 with 予\  \ char
string 4 with 能\ 能\ char
string 5 without char
string 6
string 7 with 能 without char

Требуется, чтобы после обработки он выглядел так:
string 1 with 能\\ char
string 2 with \ 能\\ char
string 3 with 予\\ \char
string 4 with 能\\ 能\\ char
string 5 without char
string 6
string 7 with 能 without char

Попробовал сделать так:
$Out = [io.file]::ReadAllLines("test.txt", [text.encoding]::GetEncoding(65001))
foreach ($str in $Out) {
  for (($i=0); ($i -lt $str.length); $i++) {
    if ([int][char]$_.Chars($i) -band 128) {
      if ([int][char]$str.Chars(($i+1)) -eq 92) {
        $str.Insert(($i+1), "\")
      }
    }
  }
}

Результат такой:
string 1 with 能\\ char
string 2 with \ 能\\ char
string 3 with 予\\ \ char
string 4 with 能\\ 能\ char
string 4 with 能\ 能\\ char

Пробовал считывать всё одной строкой с применением той же обработки:
$Out = [io.file]::ReadAllText("test.txt", [text.encoding]::GetEncoding(65001))
foreach ($str in $Out) {
  for (($i=0); ($i -lt $str.length); $i++) {
    if ([int][char]$_.Chars($i) -band 128) {
      if ([int][char]$str.Chars(($i+1)) -eq 92) {
        $str.Insert(($i+1), "\")
      }
    }
  }
}

Результат такой:
string 1 with 能\\ char
string 2 with \ 能 \ char
string 3 with 予\ \ char
string 4 with 能\ 能\ char
string 5 without char
string 6
string 7 with 能 without char

string 1 with 能\ char
string 2 with \ 能\\ char
string 3 with 予\\  \char
string 4 with 能\ 能\ char
string 5 without char
string 6
string 7 with 能 without char

string 1 with 能\ char
string 2 with \ 能\ char
string 3 with 予\\ char
string 4 with 能\ 能\ char
string 5 without char
string 6
string 7 with 能 without char

string 1 with 能\ char
string 2 with \ 能\ char
string 3 with 予\ \ char
string 4 with 能\\ 能\ char
string 5 without char
string 6
string 7 with 能 without char

string 1 with 能\ char
string 2 with \ 能\ char
string 3 with 予\ \ char
string 4 with 能\ 能\\ char
string 5 without char
string 6
string 7 with 能 without char

Подскажите, как всё же обработать строки по данному условию и поместить как подпадающие под условие и обработанные строки, так и не подпадающие и не обработанные строки в тот же или другой файл (массив)?
  • Вопрос задан
  • 259 просмотров
Решения вопроса 1
@pumpkinm
Еще ошибочку исправил: for (($i=$str.length-2); ($i -ge 0); $i--), во избежание выхода i за границы, если иероглиф в конце строки.
$In = [io.file]::ReadAllLines("d:\in.txt", [text.encoding]::GetEncoding(65001))
$Out = @()
foreach ($str in $In) {
  for (($i=$str.length-2); ($i -ge 0); $i--) {
    if ([int][char]$str.Chars($i) -band 128) {
      if ([int][char]$str.Chars(($i+1)) -eq 92) {
        $str = $str.Insert(($i+1), "\")
      	}
      }
    }
  Write-Output $str
  $Out += $str
}

[io.file]::WriteAllLines("d:\out1.txt", $Out, [text.encoding]::GetEncoding(65001))
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы