Я работаю над старым кодом C, который имеет отладочные состояния, подобные этому:

debug(1, "SomeDebugStmt %s %d", someString, someNumber);
...
debug(2, "another SomeDebugStmt number 2 %s %d", anotherString, anotherNumber);

В этом C-файле есть сотни таких отладочных операторов.

Как я мог изменить такие операторы отладки на этот формат:

debug(1, "%s--[%d] SomeDebugStmt %s %d", fname, line, someSTring, someNumber);
...
debug(2, "%s--[%d] another SomeDebugStmt number 2 %s %d", fname, line, someSTring, anotherString, anotherNumber);

Я думал, что найти и заменить с помощью регулярных выражений может быть в состоянии сделать это, но я не уверен, может ли он каким-то образом не забыть заменить точную строку из оригинала при добавлении некоторых дополнительных строковых значений. У меня есть возможность использовать Eclispe или Notepad++. Любые намеки / указатели оценены. :)

1 ответ1

0

Вы можете сделать это с помощью notepad++, используя RegExp для «Find what:»

debug\(([0-9]+,) " 

и заменить на

debug(\1 "%s--[%d] "

Объяснение регулярного выражения

debug         ; find the text "debug"
\(            ; followed by a opening parenthesis,
              ; parentheses have a special meaning in regexp, 
              ; so they must be escaped with a backslash
(             ; followed by the first subpattern, that will go in backreference \1
  [0-9]+      ; one or more digits
  ,           ; followed by a comma
)             ; end of the subpattern
 "            ; followed by a blank and a double quote

Мы заменим это

debug(        ; exact this text
\1            ; followed by the content of the first subpattern
 "            ; the blank and the double quote
%s--[%d] "   ; and the text you want to insert in those lines

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .