Powershell: объединить следующую строку с текущей строкой - PullRequest
2 голосов
/ 10 февраля 2020

Я ищу желаемый результат, как показано ниже. Основная идея состоит в том, чтобы соединить следующую строку с текущей строкой и получить одну строку, если она заканчивается символом.

Спасибо

Current Output Desired Output

$file = 'textfile.txt'
$reportObject = @() 

foreach ($line in $file) {

  $content = [IO.File]::ReadAllLines($file)

  for ($i = 0; $i -lt $content.count; $i++) {

    $line = $content[$i]

    if ($line.StartsWith("Users")) {

      $a = 0

      while ($content[$i + $a].EndsWith("\")) {                                                #"

        $reportObject += $content[$i + $a]

        $a++

      }

      $reportObject += $content[$i + $a]

    }

  }
  $reportObject
}

1 Ответ

5 голосов
/ 10 февраля 2020
# Use
#   $reportObject = (Get-Content ...
# to assign the resulting array of lines to your variable.
(Get-Content -Raw textfile.txt) -replace '\\\r?\n' -split '\r?\n'
  • Get-Content -Raw textfile.txt считывает весь файл в одну многострочную строку благодаря использованию переключателя Get-Content -Raw.

  • -replace '\\\r?\n' заменяет \ символ. (экранируйте как \\), за которым следует символ новой строки (\r?\n) [1] с (подразумеваемой) пустой строкой, и поэтому фактически удаляет соответствующую последовательность.

    • Для получения дополнительной информации об операторе -replace на основе регулярных выражений см. этот ответ .
  • -split '\r?\n' разбивает полученный результат возвращаем строку в массив отдельных строк.

    • Для получения дополнительной информации об операторе -split на основе регулярных выражений см. about_Split.

Примечание : Если во входном файле был завершающий символ новой строки, в конце этого массива будет добавлен дополнительный пустой элемент в конце:

  • Если на входе нет других пустых строк (которые необходимо сохранить), вы можете просто добавить -ne '' к приведенной выше команде, чтобы удалить все элементы с пустыми строками.

  • Чтобы удалить только элемент последний , самое простое (хотя и не самое эффективное) решение - добавить
    | Select-Object -SkipLast 1 - см. документацию Select-Object.


[1] Это регулярное выражение представляет собой кросс-платформенный способ сопоставления новой строки: оно соответствует обе последовательности Windows в стиле CRLF (\r\n) и Unix в стиле LF-only (\n) новые строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...