Скрипт Powershell для удаления блочных комментариев в скрипте - PullRequest
0 голосов
/ 17 марта 2020

У меня возникли проблемы с удалением блока комментариев, который выглядит следующим образом:

//JR-0001-//
//iErr :=  0;
// IF NOT TSUtil.ReadStatementTransactions(TRUE,iErr) THEN BEGIN
//  IF (iErr <> 0) THEN BEGIN
//    IF NOT PosConfirm(Text223,FALSE) THEN
//      EXIT;
//  END;
//END;
//JR-0001+//

JR-0001-: это начало блока комментариев

JR-0001 +: это конец блока комментариев

Мне удалось удалить однострочные комментарии (которые начинаются с "// JR-", но я застрял с удалением блока комментариев.

Любая помощь приветствуется.

Ответы [ 2 ]

2 голосов
/ 17 марта 2020

Один из способов сделать это был бы oop.

Для каждой строки входного файла:

  1. , если строка выглядит как строка «начальный комментарий», установите флаг «is comment»
  2. , если флаг в настоящее время не установлен, выведите строку
  3. , если строка строки выглядит как «комментарий конца», снимите флажок

ForEach-Object равно oop и может express это следующим образом

$isComment = $false                                             # prepare flag variable

$inputLines | ForEach-Object {
    if ($_ -match '^//JR-\d*-//')  { $isComment = $true  }      # enable flag
    if (-not $isComment) { $_ }                                 # output if flag is not set
    if ($_ -match '^//JR-\d*\+//') { $isComment = $false }      # disable flag
}

Регулярное выражение

^                    # start of string
//                   # two slashes
JR-                  # "JR-"
\d*                  # digits (0-n repetitions)
-                    # a minus sign (a plus sign in the second expression)
//                   # two slashes
0 голосов
/ 17 марта 2020

Ты имеешь в виду что-то вроде этого ...

$MyComment = @'
MyCode
BeginMyComment

//JR-0001-//
//iErr :=  0;
// IF NOT TSUtil.ReadStatementTransactions(TRUE,iErr) THEN BEGIN
//  IF (iErr <> 0) THEN BEGIN
//    IF NOT PosConfirm(Text223,FALSE) THEN
//      EXIT;
//  END;
//END;
//JR-0001+// 

EndMyComment
MyCode

'@
 # Grab and remove all content between two string pattern and the string pattern
$MyComment -replace '//JR-\d{4}-//(?s)(.*)\+//'

<#
# Results

MyCode
BeginMyComment



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