Получить описание функции и описания в файле пакета тела pl / sql - PullRequest
0 голосов
/ 08 апреля 2019

Мне нужно извлечь в Notepad ++ из файла тела пакета имя объекта (функции, процедуры и т. Д.) И описание объекта.

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

CREATE OR REPLACE PACKAGE BODY pac_example AS

/* *********************************************
*  Function f1
*  Description: Search for a data in table1
*  (another comments)
*  ******************************************* */
FUNCTION f1 RETURN NUMBER IS
BEGIN
SELECT * FROM table1;
RETURN 1;
END f1;



/* *********************************************
*  Function f2
*  Description: Search for a data in table2
*  (another comments)
*  (another comments)
*  (another comments)
*  ******************************************* */
FUNCTION f2 RETURN NUMBER IS
BEGIN
  SELECT * FROM table2;
RETURN 1;
END f2;

END pac_example;

И в этом случае мне нужно только заменить все в документе и получить что-то вроде:

/* *********************************************
*  Function f1
*  Description: Search for a data in table1
*  (another comments)
*  ******************************************* */
FUNCTION f1 RETURN NUMBER IS
/* *********************************************
*  Function f2
*  Description: Search for a data in table2
*  (another comments)
*  (another comments)
*  (another comments)
*  ******************************************* */
FUNCTION f2 RETURN NUMBER IS

или (лучший сценарий) это:

FUNCTION f1 Search for a data in table1
FUNCTION f2 Search for a data in table2

Ответы [ 2 ]

1 голос
/ 08 апреля 2019
  • Ctrl + H
  • Найти что: (?:\A.*?|\G)\*\h+((?:Function|Procedure)\h*\w+).*?Description:\h*([^\r\n]+\R)(?:(?!\*\h+(?:Function|Procedure)).)+
  • Заменить на: $1 $2
  • UNcheck Match case
  • check Обтекание
  • check Регулярное выражение
  • CHECK. matches newline
  • Заменить все

Объяснение:

(?:                         # non capture group
    \A                      # beginning of file
    .*?                     # 0 or more any character
  |                         # OR
    \G                      # restart from last match position
)                           # end group
\*                          # an asterisk
\h+                         # 1 or more horizontal spaces
(                           # start group 1
    (?:Function|Procedure)  # literally Function OR Procedure
    \h+                     # 1 or more horizontal spaces
    \w+                     # 1 or more word character
)                           # end group 1
.*?                         # 1 or more any character, not greedy
Description:\h*             # literally Description followed by horizontal spaces
(                           # start group 2
    [^\r\n]+                # 1 or more any character not linebreak
    \R                      # any kind of linebreak
)                           # end group 2
(?:                         # Tempered greedy token
    (?!                     # negative lookahead
        \*                  # an asterisk
        \h+                 # 1 or more horizontal spaces
        (?:Function|Procedure)  # literally Function OR Procedure
    )                       # end lookahead
    .                       # any character
)+                          # end group, appears 1 or more times

Замена:

$1          # content of group 1, function or procedure
$2          # content of group 2, description

Снимок экрана:

enter image description here

0 голосов
/ 08 апреля 2019

Для этого в Блокноте ++ я бы:

  1. регулярное выражение для ^([ \t\*]+)(FUNCTION|PROCEDURE)([ \t]+)([A-Z_0-9]+). Выберите на вкладке Отметка и нажмите Отметить все .
  2. Теперь ищем ^([ \t\*]+)Description: (.+). Снова нажмите Отметить все .
  3. Меню Поиск > Закладка > Копирование отмеченных строк
  4. Вставить в новый документ.

Это даст вам основу для лучшего сценария. Это просто, чтобы привести строки в порядок с помощью регулярных выражений замены.

Примечания:

  • Первый шаг выбирает имя процедуры из комментариев, т.е. * Function f2. Вы закрываете заглавные буквы, но, по крайней мере, они находятся в правильном порядке. В противном случае вам придется переключать имя и описание процедуры для каждой строки.
  • Это не хорошо, если вам нужны подписи (аргументы и т. Д.). Затем вам нужно будет найти ^([ \t]*)(FUNCTION|PROCEDURE)([ \t]+)([A-Z_0-9]+) и переупорядочить описания
  • Я включил шаблоны табуляции и пробелов, потому что не ясно, как ваш источник имеет отступ
...