⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 regex.c

📁 labwindow 编程的toolbox例程。
💻 C
字号:
//-----------------------------------------------------------------------------
// This example program shows how to use CVI regular expressions
//-----------------------------------------------------------------------------

//-----------------------------------------------------------------------------
// Include files
//-----------------------------------------------------------------------------
#include <cvirte.h>     
#include <userint.h>
#include "RegEx.h"
#include "regexpr.h"

//-----------------------------------------------------------------------------
// Macros
//-----------------------------------------------------------------------------
#define regChk(f)                                                   \
if (error = (f), error < 0)                                         \
{                                                                   \
    MessagePopup("RegExpr Error", RegExpr_GetErrorString (error));  \
    goto Error;                                                     \
} else

//-----------------------------------------------------------------------------
// Global variables
//-----------------------------------------------------------------------------
static int gPanel;
static int gMatchFound, gMatchPosition, gMatchLength;

//-----------------------------------------------------------------------------
// Forward declarations
//-----------------------------------------------------------------------------
static void Reset(void);
static void Find(void);

//-----------------------------------------------------------------------------
// Program entry-point
//-----------------------------------------------------------------------------
int main (int argc, char *argv[])
{
    // Initialize program
    if (InitCVIRTE(0, argv, 0) == 0)
        return -1;
    if ((gPanel = LoadPanel(0, "RegEx.uir", PANEL)) < 0)
        return -1;
    Reset();
    Find();
    DisplayPanel(gPanel);
    
    RunUserInterface();
    
    // Cleanup
    DiscardPanel(gPanel);
    return 0;
}

//-----------------------------------------------------------------------------
// User interface callback functions
//-----------------------------------------------------------------------------
int CVICALLBACK PanelCallback (int panel, int event, void *callbackData,
        int eventData1, int eventData2)
{
    switch (event)
    {
        case EVENT_CLOSE:
            QuitUserInterface(0);
            break;
    }
    return 0;
}

int CVICALLBACK TextCallback (int panel, int control, int event,
        void *callbackData, int eventData1, int eventData2)
{
    switch (event)
    {
        case EVENT_VAL_CHANGED:
            Reset();
            break;
    }
    return 0;
}

int CVICALLBACK PatternCallback (int panel, int control, int event,
        void *callbackData, int eventData1, int eventData2)
{
    switch (event)
    {
        case EVENT_VAL_CHANGED:
            Reset();
            break;
    }
    return 0;
}

int CVICALLBACK FindCallback (int panel, int control, int event,
        void *callbackData, int eventData1, int eventData2)
{
    switch (event)
    {
        case EVENT_COMMIT:
            Find();
            break;
    }
    return 0;
}

//-----------------------------------------------------------------------------
// Internal functions
//-----------------------------------------------------------------------------
static void Reset(void)
{
    // Start next search at the beginning of the text
    gMatchFound    = FALSE;
    gMatchPosition = 0;
    gMatchLength   = 0;
    SetCtrlAttribute(gPanel, PANEL_FIND, ATTR_DIMMED, 0);
}

static void Find(void)
{
    int  error, succeeded, length, newPosition;
    int  newPattern = FALSE, foundNew = FALSE;
    char text[1040], pattern[128];
    
    // Get regular expression and input text
    GetCtrlVal(gPanel, PANEL_TEXT, text);
    GetCtrlVal(gPanel, PANEL_PATTERN, pattern);

    if (!gMatchFound)
    {
        // Look for match
        newPattern = TRUE;
        regChk(RegExpr_FindPatternInText(pattern, 0, text + gMatchPosition,
            strlen (text + gMatchPosition), RegExpr_SearchForwards,
            RegExpr_MatchLargestNumChars,
            &gMatchFound, &newPosition, &gMatchLength));
        gMatchPosition += newPosition;
        foundNew        = gMatchFound;
    }
    
    if (gMatchFound)
    {
        // Display the match result as textbox selection
        SetCtrlAttribute (gPanel, PANEL_TEXT,
            ATTR_TEXT_SELECTION_START, gMatchPosition);
        SetCtrlAttribute (gPanel, PANEL_TEXT,
            ATTR_TEXT_SELECTION_LENGTH, gMatchLength);
        
        // Look for the next match
        gMatchPosition += gMatchLength;
        regChk(RegExpr_FindPatternInText(pattern, 0, text + gMatchPosition,
            strlen (text + gMatchPosition), RegExpr_SearchForwards,
            RegExpr_MatchLargestNumChars,
            &gMatchFound, &newPosition, &gMatchLength));
        gMatchPosition += newPosition;
    }
    else
    {
        // Match is empty; clear the textbox selection
        SetCtrlAttribute (gPanel, PANEL_TEXT, ATTR_TEXT_SELECTION_LENGTH, 0);
    }
    
Error:
    SetCtrlAttribute(gPanel, PANEL_FIND, ATTR_DIMMED, error < 0 || !gMatchFound);
    SetActiveCtrl(gPanel, PANEL_TEXT);
    if (newPattern && !foundNew) {
        MessagePopup ("Info", "The pattern was not found.");
        SetActiveCtrl(gPanel, PANEL_PATTERN);
    }
}

//-----------------------------------------------------------------------------

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -