Irgendwie wünsche ich mir, das (z.b. mit RegEx-Buddy) getestete reguläre Ausdrücke auch in XProfan einfach funktionieren.
Dazu gehört dann auch irgendwann das Backreferences unterstützt werden und das ein Ausdruck nur einmal kompiliert wird und beliebig oft genutzt werden kann.
Eventuell auch eine Automatik, die x-mal die Suche durchführt und dann ein StringArray[x] gefüllt hat.
Dieser Ausdruck, extra in eine separate Datei eingelesen:
Code: RegEx_Containersuche.RegEx
(\WCom\(\s*?"(Close|Error|Open|Read|Set|SetExt|SetTimeOuts|Write)"|\WCreate\(\s*?"(Bitmap|Button|CheckBox|ChildWindow|ChoiceBox|Container|DateEdit|DefButton|Dialog|Edit|ExtDialog|FileMap|Font|Grid|Gridbox|GroupBox|hIcon|hMetaFile|hNewPic|hPic|hPicCopy|HScroll|hSizedPic|HTMLWin|Icon|IconButton|ImageList|Json|List|ListBox|MultiEdit|PicButton|RadioButton|RichEdit|SpinEdit|Static|StatusWindow|TabCtrl|Text|TimeEdit|Toolbar|Tooltip|TreeView|VScroll|Window)"|\Wdb\(\s*?"(AppendBlank|Browse|Close|Create|CreateIndex|Delete|Edit|fbCreate|fbDone|fbDrop|fbExec|fbGetBlob|fbInit|fbPutBlob|fbSQLExec|fbTableExists|fbUseDLL|Find|Get|GetField|GetMemo|Go|Index|Open|Pack|Put|PutField|PutMemo|PutRec|Seek|slCreate|slDone|slDrop|slExec|slGetBlob|slInit|slPutBlob|slSQLExec|slTableExists|slUseDLL|SQLDone|SQLExec|SQLGetBlob|SQLInit|SQLPutBlob|Undelete|Use)"|\Wdt\(\s*?"(Compare|CompareDate|CompareTime|DateTimeStr|DaysBetween|GetDate|GetDay|GetDoW|GetDoY|GetHour|GetMilliSec|GetMin|GetMonth|GetSec|GetTime|GetWoY|GetYear|IncDay|IncHour|IncMin|IncMonth|IncSec|IncYear|IsLeapYear|SetDate|SetDateTime|SetDay|SetHour|SetMilliSec|SetMin|SetMonth|SetSec|SetTime|SetYear)"|\WFileMap\(\s*?"(Close|Map|Open)"|\WFTP\(\s*?"(Connect|DeleteDir|DeleteFile|Disconnect|Download|GetDir|GetFileSize|ListDir|MakeDir|Rename|SetBinary|SetDir|SetPassive|SetProxy|Upload)"|\WGet\(\s*?"(ASMMode|AutoPaint|CallConv|CharSet|dbMemoWidth|DebugMode|Decimals|Errorlevel|Escape|FastMode|FileInfo|FileMode|GridBoxTitle|HashDel|HashListDel|HashMode|ListDel|LogFile|MenuBackCol|MenuBorderCol|MenuFont|MenuIconSize|MenuTextCol|MessageMode|MoveListMode|NumWidth|oGLDepth|oGLW2H|OnError|Orientation|PDC|PicBackCol|RandSeed|Reg64|RegEx|SMTPSSL|SQLColWidth|SQLDBC|SQLDel|SQLEmbedded|SQLFile|SQLNull|SQLWidth|StrWidth|SubClassMode|TrueColor|WinProc)"|\WHTMLWin\(\s*?"(GetBusy|GoBack|GoForward|GoHome|GoSearch|Navigate|Refresh|Stop)"|\WImageList\(\s*?"(Add|AddIcon|GetIcon)"|\WJson\(\s*?"(AddBool|AddList|AddNumber|AddObject|AddString|Count|GetBool|GetList|GetNumber|GetObject|GetString|Hash|Name|NewList|Text|Type|Value|Write)"|\WMidi\(\s*?"(Close|Open|OutShort|Play|Read|Write)"|\WMove\(\s*?"(ArrToList|FileToList|HandleToList|ListToArr|ListToFile|ListToHandle|ListToMem|ListToStr|MemToList|StrToList)"|\WoGL\(\s*?"(2D|API|BitmapFont|BlendMode|Clear|Color|CreateXPGL|Cuboid|Cylinder|DeleteList|DeleteTexture|Disk|Done|Draw|DrawList|DrawXPGL|EndList|EndTest|ErrorString|Fog|GetTextureBmp|Init|LoadTextureBmp|LoadXPGL|LoadXPGLData|Locate|Move|Origin|OutlineFont|PartialDisk|Pop|PosMode|Print|Push|Pyramid|Quad|Rotate|SaveXPGLData|Scale|SetName|Show|Sphere|StartList|StartTest|TestMouse|TestXY|Texture|Triangle|Tube|UseXPGL|XPGLCount|XPGLObjType|XPGLType)"|\WProcess\(\s*?"(GetWindowPID|Kill|Resume|SetPriority|Suspend)"|\WRes\(\s*?"(AddRes|AddStrings|Change|Get|GetStrings|Info|Load|Save|Size)"|\WRTF\(\s*?"(LoadRTF|LoadText|SaveRTF|SaveText)"|\WSet\(\s*?"(ASMMode|AutoPaint|CallConv|CharSet|dbMemoWidth|DebugMode|Decimals|Errorlevel|Escape|FastMode|FileMode|GridBoxTitle|HashDel|HashListDel|HashMode|ListDel|LogFile|MenuBackCol|MenuBorderCol|MenuFont|MenuIconSize|MenuTextCol|MessageMode|MoveListMode|NumWidth|oGLDepth|oGLW2H|OnError|Orientation|PDC|PicBackCol|RandSeed|Reg64|RegEx|SMTPSSL|SQLColWidth|SQLDBC|SQLDel|SQLEmbedded|SQLFile|SQLNull|SQLWidth|StrWidth|SubClassMode|TrueColor|WinProc)"|\WSMTP\(\s*?"(GetFolders|GetHeaders|GetMail|SendFile|SendList|SendMail|SendRaw)"|\WToolbar\(\s*?"(AddButton|AddTextButton|CheckButton|DeleteButton|EnableButton|InsertButton|InsertTextButton|IsChecked|Separator|ShowButton)"|\WTrayIcon\(\s*?"(Add|Delete|Msg|SetIcon|SetTip)"|\WTreeView\(\s*?"(DeleteItem|Expand|GetParam|GetParent|GetSelected|InsertItem|Select|SetChildren|SetItemImage|SetParam)")
wurde durchgetestet und funktioniert.
Aber selbst als Datei eingelesen, klappt es nicht
Code
// die richtigen Subfunktionen suchen
Cls
Declare string suche_container_funktion, quelltext
Declare int P,L,Start, string S
Set("RegEx",1)
REM dies will nicht...
// suche_container_funktion = "(\WCom\(\s*?\q(Close|Error|Open|Read|Set|SetExt|SetTimeOuts|Write)\q|\WCreate\(\s*?\q(Bitmap|Button|CheckBox|ChildWindow|ChoiceBox|Container|DateEdit|DefButton|Dialog|Edit|ExtDialog|FileMap|Font|Grid|Gridbox|GroupBox|hIcon|hMetaFile|hNewPic|hPic|hPicCopy|HScroll|hSizedPic|HTMLWin|Icon|IconButton|ImageList|Json|List|ListBox|MultiEdit|PicButton|RadioButton|RichEdit|SpinEdit|Static|StatusWindow|TabCtrl|Text|TimeEdit|Toolbar|Tooltip|TreeView|VScroll|Window)\q|\Wdb\(\s*?\q(AppendBlank|Browse|Close|Create|CreateIndex|Delete|Edit|fbCreate|fbDone|fbDrop|fbExec|fbGetBlob|fbInit|fbPutBlob|fbSQLExec|fbTableExists|fbUseDLL|Find|Get|GetField|GetMemo|Go|Index|Open|Pack|Put|PutField|PutMemo|PutRec|Seek|slCreate|slDone|slDrop|slExec|slGetBlob|slInit|slPutBlob|slSQLExec|slTableExists|slUseDLL|SQLDone|SQLExec|SQLGetBlob|SQLInit|SQLPutBlob|Undelete|Use)\q|\Wdt\(\s*?\q(Compare|CompareDate|CompareTime|DateTimeStr|DaysBetween|GetDate|GetDay|GetDoW|GetDoY|GetHour|GetMilliSec|GetMin|GetMonth|GetSec|GetTime|GetWoY|GetYear|IncDay|IncHour|IncMin|IncMonth|IncSec|IncYear|IsLeapYear|SetDate|SetDateTime|SetDay|SetHour|SetMilliSec|SetMin|SetMonth|SetSec|SetTime|SetYear)\q|\WFileMap\(\s*?\q(Close|Map|Open)\q|\WFTP\(\s*?\q(Connect|DeleteDir|DeleteFile|Disconnect|Download|GetDir|GetFileSize|ListDir|MakeDir|Rename|SetBinary|SetDir|SetPassive|SetProxy|Upload)\q|\WGet\(\s*?\q(ASMMode|AutoPaint|CallConv|CharSet|dbMemoWidth|DebugMode|Decimals|Errorlevel|Escape|FastMode|FileInfo|FileMode|GridBoxTitle|HashDel|HashListDel|HashMode|ListDel|LogFile|MenuBackCol|MenuBorderCol|MenuFont|MenuIconSize|MenuTextCol|MessageMode|MoveListMode|NumWidth|oGLDepth|oGLW2H|OnError|Orientation|PDC|PicBackCol|RandSeed|Reg64|RegEx|SMTPSSL|SQLColWidth|SQLDBC|SQLDel|SQLEmbedded|SQLFile|SQLNull|SQLWidth|StrWidth|SubClassMode|TrueColor|WinProc)\q|\WHTMLWin\(\s*?\q(GetBusy|GoBack|GoForward|GoHome|GoSearch|Navigate|Refresh|Stop)\q|\WImageList\(\s*?\q(Add|AddIcon|GetIcon)\q|\WJson\(\s*?\q(AddBool|AddList|AddNumber|AddObject|AddString|Count|GetBool|GetList|GetNumber|GetObject|GetString|Hash|Name|NewList|Text|Type|Value|Write)\q|\WMidi\(\s*?\q(Close|Open|OutShort|Play|Read|Write)\q|\WMove\(\s*?\q(ArrToList|FileToList|HandleToList|ListToArr|ListToFile|ListToHandle|ListToMem|ListToStr|MemToList|StrToList)\q|\WoGL\(\s*?\q(2D|API|BitmapFont|BlendMode|Clear|Color|CreateXPGL|Cuboid|Cylinder|DeleteList|DeleteTexture|Disk|Done|Draw|DrawList|DrawXPGL|EndList|EndTest|ErrorString|Fog|GetTextureBmp|Init|LoadTextureBmp|LoadXPGL|LoadXPGLData|Locate|Move|Origin|OutlineFont|PartialDisk|Pop|PosMode|Print|Push|Pyramid|Quad|Rotate|SaveXPGLData|Scale|SetName|Show|Sphere|StartList|StartTest|TestMouse|TestXY|Texture|Triangle|Tube|UseXPGL|XPGLCount|XPGLObjType|XPGLType)\q|\WProcess\(\s*?\q(GetWindowPID|Kill|Resume|SetPriority|Suspend)\q|\WRes\(\s*?\q(AddRes|AddStrings|Change|Get|GetStrings|Info|Load|Save|Size)\q|\WRTF\(\s*?\q(LoadRTF|LoadText|SaveRTF|SaveText)\q|\WSet\(\s*?\q(ASMMode|AutoPaint|CallConv|CharSet|dbMemoWidth|DebugMode|Decimals|Errorlevel|Escape|FastMode|FileMode|GridBoxTitle|HashDel|HashListDel|HashMode|ListDel|LogFile|MenuBackCol|MenuBorderCol|MenuFont|MenuIconSize|MenuTextCol|MessageMode|MoveListMode|NumWidth|oGLDepth|oGLW2H|OnError|Orientation|PDC|PicBackCol|RandSeed|Reg64|RegEx|SMTPSSL|SQLColWidth|SQLDBC|SQLDel|SQLEmbedded|SQLFile|SQLNull|SQLWidth|StrWidth|SubClassMode|TrueColor|WinProc)\q|\WSMTP\(\s*?\q(GetFolders|GetHeaders|GetMail|SendFile|SendList|SendMail|SendRaw)\q|\WToolbar\(\s*?\q(AddButton|AddTextButton|CheckButton|DeleteButton|EnableButton|InsertButton|InsertTextButton|IsChecked|Separator|ShowButton)\q|\WTrayIcon\(\s*?\q(Add|Delete|Msg|SetIcon|SetTip)\q|\WTreeView\(\s*?\q(DeleteItem|Expand|GetParam|GetParent|GetSelected|InsertItem|Select|SetChildren|SetItemImage|SetParam)\q)"
REM deshalb einfach das mit RegEx-Buddy getestete Original einlesen
Declare mem Block, string Datei
Datei = "RegEx_Containersuche.RegEx"
Dim Block, FileSize(Datei)+2
BlockRead(Datei,Block)
suche_container_funktion = String$(Block,0)
suche_container_funktion = Translate$(suche_container_funktion, "\\", "~")
quelltext = "Set(\qMoveListMode\q,1)\nMove(\qStrToList\q,S,\q,\q)\n\nProc MoveListProc\n Parameters string s, int i\n if get(\qMoveListMode\q) = 1\n AddString str$(i) + \q \q + s\n elseif get( \qMoveListMode\q) = 2\n AddString left$(s, 2)\n endif\nEndProc\n\n"
Print quelltext
Start = 1
REM Grundsätzlich läuft die Schleife.... (einfach die While vertauschen)
'While InStr( "Move", quelltext, Start ) <> 0
While InStr( suche_container_funktion, quelltext, Start ) <> 0
P = %MatchPos
L = %MatchLen
S = $Match
Print "- gefunden an Pos:",Str$(P),", Länge:",Str$(L),", Wert:",S
Case Start > P : BREAK
Case P >= Start : Start = Start + P + L
EndWhile
Print "\n(Ende = Taste/Maustaste)"
WaitInput
End
Alles anzeigen