2013-07-17 4 views
2

Теперь у меня большой проект на C++, который состоит из 1400k строк кода. Теперь у меня есть требование: добавьте одну строку кода в каждый класс, который получен из CDialog, CWnd или CListCtrl. Это невозможно для меня сделать вручную. Я думаю, может быть, регулярное выражение UltraEdit может дать мне руку, но я не могу написать собственное регулярное выражение.Как написать регулярное выражение в UE для реализации этого требования?

Кто-нибудь может мне помочь?

Вот строка кода, чтобы добавить:

virtual ULONG GetGestureStatus(CPoint ptTouch) { return 0;} 

и вот мой код структуры (только для иллюстрации):

class CRibbonAddPlaceDialog : public CDialog 
{ 
    DECLARE_DYNAMIC(CRibbonAddPlaceDialog) 

public: 
    CRibbonAddPlaceDialog(); 
    virtual ~CRibbonAddPlaceDialog(); 
    enum { IDD = IDD_RIBBON_ADDPLACE }; 

protected: 
    virtual ULONG GetGestureStatus(CPoint ptTouch) { return 0;}//the line to add 
    virtual void DoDataExchange(CDataExchange* pDX); 
    DECLARE_MESSAGE_MAP() 
    afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct); 
    afx_msg void OnDestroy(); 
    virtual BOOL OnInitDialog(); 
    virtual BOOL OnCmdMsg(UINT nID, int nCode, void* pExtra, AFX_CMDHANDLERINFO* pHandlerInfo); 
public: 
    BOOL AddButton(CFX_WideString csTitle, AddPlaceButtonProc proc, void* pClientData, CFX_DIBitmap* pButtonImage); 
public: 

    CReader_RibbonFilePageManager* m_pRibbonFilePageMgr; 
    CReader_RibbonStyle_Static*  m_pAddPlace; 
    CReader_RibbonStyle_Static*  m_pAddPlaceTip; 
    CTypedPtrArray<CPtrArray, buttondata*> m_arButtonData; 
    CTypedPtrArray<CPtrArray, CBCGPButton*>m_arButton; 

}; 
+0

Какой ОС вы на, Windows? – mirkobrankovic

+0

Да, я нахожусь в Windows 7 – Triumphant

+2

Затем начинаем изучать регулярное выражение. Это совсем не сложно. Вы можете [начать здесь] (http://www.regular-expressions.info/tutorial.html) или [здесь] (http://regex.learncodethehardway.org/book/). – HamZa

ответ

3

Предполагая, что вы хотите поместить это право строки после открытие {, попробуйте выполнить поиск (с Perl регулярных выражений включен):

^(class\b.*\bC(?:Dialog|Wnd|ListCtrl).*\r?\n\{\r?\n) 

и повторно место с

\1virtual ULONG GetGestureStatus(CPoint ptTouch) { return 0;}\r\n 
+0

Большое вам спасибо, но я получил предупреждение: вы ввели недопустимое выражение. – Triumphant

+1

Вы проверили опцию «Perl regex»? –

+0

Да, я проверил параметр «Perl regex», и моя версия UE: Редактор UltraEdit Professional Text/HEX Версия 18.10.0.1016. Я что-то упускаю? – Triumphant

1

perl -ibak -pe "s/protected:\n/protected:\n virtual ULONG GetGestureStatus(CPoint ptTouch) { return 0;}/" file_name

+1

имейте в виду, что он добавит строку после каждого раза «protected:» появляется в файле – levengli

+0

очень хороший ответ, по сути, я также хочу принять ваш ответ, если я могу принять два одновременно. Я подтвердил ваш ответ и комментарий. – Triumphant

+0

спасибо. вы можете принять только один ответ - правила игры :) – levengli

Смежные вопросы