📄 regex.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 + -