PDA

View Full Version : TOPIC REGEXPR Examples



Gary
27-08-2023, 17:34
'---Script modified to work on Thinbasic 08-27-2023 03:10:48 by Gary Robinson
'TOPIC REGEXPR and REGREPL demo (023269)
'NAME Michael Mattias
'DATE 2002-01-16 07:09


Uses "Console"
uses "File"








Dim Stat As Long
Dim J$

Print "Hello World from Program "
Console_WaitKey
Reg1()
Console_WaitKey




function Reg1()


Dim TheFile As String, FileData As String ' , H AS LONG
Dim I As Long
Dim J$
' REGEXPR, REREPL variables
Dim Mask As String, posvar As Long, lenvar As Long, startvar As Long
Dim Mask2 As String
Dim TheMain As String ' 'MAIN' IS AN UNDOCUMENTED KEYWORD
Dim TheWord As String
Dim NewMain As String
Dim ReplaceMask As String


' **** REGEXPR demos *****
'PbHelpFile() ' Tested OK
'PhoneNumbers() ' tested OK
'AlternateSpelling() ' tested OK
'FindEachWordInString() ' tested OK
'FindAllComments_InSourceCode() 'tested OK
'ThreewayAlternation() ' tested OK
'RegExprLineInput() ' tested OK




'
' CompressSpaces() ' tested OK
'ReplaceEachWordInStringWithPlural() ' tested OK
'ParseCSVFile() ' tested OK
CreateDeclareFile() ' tested OK


end function


function PBHelpFile()
Dim Mask As String, posvar As Long, lenvar As Long, startvar As Long
Dim Mask2 As String
Dim TheMain As String ' 'MAIN' IS AN UNDOCUMENTED KEYWORD
Dim TheWord As String
Dim NewMain As String
Dim ReplaceMask As String
TheMain = "Send your comments to BASICally Speaking at bsp@infoms.com"


'Mask = "[a-z_.-]+@[a-z_.-]+"
Mask = "[html]+@[html]+"
dim nStart as long,s as string
nStart=1
Print mask
'mask =chgRe(mask)
'Print mask
REGEXPR$(Mask, TheMain, startvar, PosVar, LenVar)
'RegExpr Mask In TheMain To PosVar, LenVar
Print "REGEXPR returns:" & Mid$(TheMain, PosVar, lenVar)
Console_WaitKey
End Function


function AlternateSpelling()
Dim Mask As String, posvar As Long, lenvar As Long, startvar As Long
Dim Mask2 As String
Dim TheMain As String ' 'MAIN' IS AN UNDOCUMENTED KEYWORD
Dim TheWord As String
Dim NewMain As String
Dim ReplaceMask As String

Mask = "Colo[u]?r" ' a 'u' in the indicated position is optional
TheMain = " The color of the leaves is more brilliant than the colour of the television."


' INPUT: TheMain, Mask. OUTPUT: multiple REGEXPR results
PosVar = 1: StartVar = 1
While PosVar
REGEXPR$(Mask, TheMain, StartVar, PosVar, LenVar)
'RegExpr Mask In TheMain At StartVar To PosVar,Lenvar
If PosVar Then
TheWord = Mid$(TheMain, Posvar, LenVar)
Print TheWord
StartVar = PosVar + LenVar
End If
Wend
end function


Function PhoneNumbers()
Dim Mask As String, posvar As Long, lenvar As Long, startvar As Long
Dim Mask2 As String
Dim TheMain As String ' 'MAIN' IS AN UNDOCUMENTED KEYWORD
Dim TheWord As String
Dim NewMain As String
Dim ReplaceMask As String
Mask = "\([3 digits]\)-[3 digits]-[4 digits]"
Print mask
'mask=chgRe(mask)
'Mask = "\([0-9][0-9][0-9]\)-[0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]"
TheMain = " call me at (900)-123-4567"
REGEXPR$(Mask, TheMain, PosVar, LenVar)
'RegExpr Mask In TheMain To PosVar,LenVar
If PosVar Then Print Mid$(TheMain, PosVar, LenVar)
Console_WaitKey
end function


function FindEachWordInString()
Dim Mask As String, posvar As Long, lenvar As Long, startvar As Long
Dim Mask2 As String
Dim TheMain As String ' 'MAIN' IS AN UNDOCUMENTED KEYWORD
Dim TheWord As String
Dim NewMain As String
Dim ReplaceMask As String

TheMain = " Now is the time for all good men" & $CrLf & "to come to the aid of his party."
Let mask = "[1+ letters][wordboundary]" ' \b = word boundary. CRLF is (undocumented) word boundary
Print mask
'mask=chgRe(mask)
'GoSub RegExprLoop
PosVar = 1: StartVar = 1
While PosVar
REGEXPR$(Mask, TheMain, StartVar, PosVar, LenVar)
'RegExpr Mask In TheMain At StartVar To PosVar,Lenvar
If PosVar Then
TheWord = Mid$(TheMain, Posvar, LenVar)
Print TheWord
StartVar = PosVar + LenVar
End If
Wend
end function


function ThreewayAlternation()
Dim Mask As String, posvar As Long, lenvar As Long, startvar As Long
Dim Mask2 As String
Dim TheMain As String ' 'MAIN' IS AN UNDOCUMENTED KEYWORD
Dim TheWord As String
Dim NewMain As String
Dim ReplaceMask As String


TheMain = " Two is too many to do the job "
Mask = "(to[wordboundary])|(too[wordboundary])|(two[wordboundary])" ' works fine 2, 9, 18 found
Print mask
'mask=chgRe(mask)


Mask = "(to)|(too)|(two)\b" ' did not find too(9), but did find to (18) and Two (2) BUGBUGBUG
' Mask = "((to)|(too)|(two))\b" ' found Two (2) and to (18) but not too (9)
' Mask = "[(to)|(too)|(two)]\b" ' found single 'o' chararters at 4, 11, 19 and 22
' Mask = "[(to)|(too)|(two)]+\b" ' found Two(2), too(9), to (18) and 'o' at 22 (in 'do')
' GoSub RegExprLoop
PosVar = 1: StartVar = 1
While PosVar
REGEXPR$(Mask, TheMain, StartVar, PosVar, LenVar)
'RegExpr Mask In TheMain At StartVar To PosVar,Lenvar
If PosVar Then
TheWord = Mid$(TheMain, Posvar, LenVar)
Print TheWord
StartVar = PosVar + LenVar
End If
Wend
end function


function RegExprLineInput()
Dim Mask As String, posvar As Long, lenvar As Long, startvar As Long
Dim Mask2 As String
Dim TheMain As String ' 'MAIN' IS AN UNDOCUMENTED KEYWORD
Dim TheWord As String
Dim NewMain As String
Dim ReplaceMask As String
Dim TheFile as string,FileData as string
TheFile = "Regexpression.BAS"
FileData = LoadFile (TheFile)
'Print "Size of file is " & Str$(Len(FileData))
Console_WaitKey
StartVar = 1: PosVar = 1
Mask = "\n" ' \n = newline
While PosVar
REGEXPR$(Mask, FileData, StartVar, PosVar, LenVar)
'RegExpr Mask In FileData At StartVar To PosVar, LenVar
If PosVar Then
TheWord = Mid$(FileData, StartVar, PosVar - StartVar-1) ' NOTE: must remove the newline character
Print "x";TheWord;"x"
StartVar = PosVar + LenVar
End If
Wend
end function


function CompressSpaces()
Dim Mask As String, posvar As Long, lenvar As Long, startvar As Long
Dim Mask2 As String
Dim TheMain As String ' 'MAIN' IS AN UNDOCUMENTED KEYWORD
Dim TheWord As String
Dim NewMain As String
Dim ReplaceMask As String
dim retFromReg as string

TheMain = " The color of the leaves is more brilliant than the colour of the television."
Mask = "\x20[\x20]+" ' find space followed by one or more spaces
'mask =chgRe(mask)
Print mask + $crlf
ReplaceMask = "\x20" ' replace with a single space.
PosVar = 1 : StartVar = 1
Print "TheMain Begins as " & $Dq & TheMain & $Dq + $crlf
While StartVar
REGEXPR$(Mask, TheMain, StartVar, PosVar, LenVar)
retFromReg=Mid$(TheMain,PosVar,LenVar)

'replaces multiple spaces with one space
newMain = REPLACE$(TheMain, retFromReg, " ")


'RegRepl Mask In TheMain With ReplaceMask At StartVar To Posvar, NewMain
StartVar = PosVar
TheMain = NewMain
Wend
Print "TheMain Converted to " & $Dq & NewMain & $Dq + $crlf
end function


function ReplaceEachWordInStringWithplural()
Dim Mask As String, posvar As Long, lenvar As Long, startvar As Long
Dim Mask2 As String
Dim Main As String ' 'MAIN' IS AN UNDOCUMENTED KEYWORD
Dim TheWord As String
Dim NewMain2 As String
Dim ReplaceMask As String
dim retFromReg as string
dim newRetFromReg as string


Main = "Now is the time for all good men" & $CrLf
'Find each word in a string WORKS 9/17/99 even with embedded spaces, CRLF is an undocumented word boundary
mask = "([A-Za-z]+)[\x20]" ' not working
Print mask + $crlf

Main = "Now is the time for all good men" & $CrLf
print main
ReplaceMask = "\01s" ' for each word, append an 's'
StartVar = 1: PosVar =1
While StartVar
REGEXPR$(Mask, Main, StartVar, PosVar, LenVar)
retFromReg=Mid$(Main,PosVar,LenVar)

newRetFromReg=trim$(retFromReg) + "s "

StartVar = PosVar+lenVar

Main = REPLACE$(Main, retFromReg, newRetFromReg)
Wend

Print Main + $crlf
end function


function ParseCSVFile()
Dim Mask As String, posvar As Long, lenvar As Long, startvar As Long
Dim Mask2 As String
Dim TheMain As String ' 'MAIN' IS AN UNDOCUMENTED KEYWORD
Dim TheWord As String
Dim NewMain As String
Dim ReplaceMask As String
dim FileData as string


' file in: "Value","value", "value",crlf, "value", "value", "value", Crlf.....
FileData = $Dq & "Smith" & $Dq & "," & $Dq & "John" & $Dq & "," & $Dq & "555-1234" & $Dq & $CrLf & _
$Dq & "Doe" & $Dq & "," & $Dq & "Jane" & $Dq & "," & $Dq & "555-6789" & $Dq & $CrLf & _
$Dq & "Brown" & $Dq & "," & $Dq & "Willie" & $Dq & "," & $Dq & "555-8765" & $Dq & $CrLf


Dim WordMask As String


Mask = "\q(.*)\q"
Print mask + $crlf




Print FileData + $crlf
Print "*** END OF FILEDATA OF LEN=" & Str$(Len(FileData)) & "***" +$crlf


Console_WaitKey
dim retFromReg as string
dim newRetFromReg as string
PosVar = 1: StartVar = 1
While StartVar
REGEXPR$(Mask, FileData, StartVar, PosVar, LenVar)
retFromReg=Mid$(Main,PosVar,LenVar)

newRetFromReg=trim$(retFromReg)

StartVar = PosVar+lenVar

Main = REPLACE$(Main, retFromReg, newRetFromReg)
Wend

Print Main + $crlf


Print Filedata ' show the modified file
end function




function CreateDeclareFile()
dim TheFile as string
dim FileData as string

Dim Mask As String, posvar As Long, lenvar As Long, startvar As Long
Dim Mask2 As String
Dim TheMain As String ' 'MAIN' IS AN UNDOCUMENTED KEYWORD
Dim TheWord As String
Dim NewMain As String
Dim ReplaceMask As String




dim retFromReg as string
dim newRetFromReg as string
dim declaresFound as string
TheFile = "C:\thinBasic\SampleScripts\regularExpression.tbasic"
FileData = File2Text(TheFile)
Mask = "^[\x20]*((SUB)|(FUNCTION))[\x20]+[a-z]+"
Print mask + $crlf

' first line of SUB/FUNCTIONs which use _ continuation to next line
PosVar = 1
Print "START OUTPUT for Mask = " & mask + $crlf

PosVar = 1: StartVar = 1
While StartVar
REGEXPR$(Mask, FileData, StartVar, PosVar, LenVar)
retFromReg=Mid$(FileData,PosVar,LenVar)
declaresFound=declaresFound + "Declare "+retFromReg + $crlf

StartVar = PosVar+lenVar
Wend
'---------------------------------------------------------------------------------------
Print declaresFound + $crlf








end function


function FindAllComments_InSourceCode()
dim TheFile as string
dim FileData as string
dim mask as string
dim startvar as long
dim posVar as long
dim lenvar as long
dim retFromReg as string
TheFile = "C:\thinBasic\SampleScripts\regularExpression.tbasic"
FileData = File2Text(TheFile)
dim comments as string
Mask = "'[\x20]*[A-Za-z0-9 ]*"


PosVar = 1: StartVar = 1
While StartVar
REGEXPR$(Mask, FileData, StartVar, PosVar, LenVar)
retFromReg=Mid$(FileData,PosVar,LenVar)
comments=comments + retFromReg + $crlf

StartVar = PosVar+lenVar
Wend

Print comments + $crlf


end function




Function File2Text(sfn As String) As String


Dim st As String
Dim n As Long
Dim FileHandle As DWORD,s as string
FileHandle= FILE_OPEN(sfn, "INPUT")
while not FILE_EOF(FileHandle)
s=FILE_LineInput(FileHandle)
st=st+s+$crlf
wend

s = FILE_Close(FileHandle)
Function=st
End Function


Function bbb() As Long
' dummy function, used in FindAllProceduresInSourceCode; indented on purpose
End Function


Function ManyParameters (A As Single, B As Double, C As long, Z_A As String ) As Long
' dummy function for demo
End Function




'------------------
'---Script modified to work on Thinbasic 08-27-2023 03:10:48 by Gary Robinson
'TOPIC REGEXPR and REGREPL demo (023269)
'NAME Michael Mattias
'DATE 2002-01-16 07:09


Uses "Console"
uses "File"








Dim Stat As Long
Dim J$

Print "Hello World from Program "
Console_WaitKey
Reg1()
Console_WaitKey




function Reg1()


Dim TheFile As String, FileData As String ' , H AS LONG
Dim I As Long
Dim J$
' REGEXPR, REREPL variables
Dim Mask As String, posvar As Long, lenvar As Long, startvar As Long
Dim Mask2 As String
Dim TheMain As String ' 'MAIN' IS AN UNDOCUMENTED KEYWORD
Dim TheWord As String
Dim NewMain As String
Dim ReplaceMask As String


' **** REGEXPR demos *****
'PbHelpFile() ' Tested OK
'PhoneNumbers() ' tested OK
'AlternateSpelling() ' tested OK
'FindEachWordInString() ' tested OK
'FindAllComments_InSourceCode() 'tested OK
'ThreewayAlternation() ' tested OK
'RegExprLineInput() ' tested OK




'
' CompressSpaces() ' tested OK
'ReplaceEachWordInStringWithPlural() ' tested OK
'ParseCSVFile() ' tested OK
CreateDeclareFile() ' tested OK


end function


function PBHelpFile()
Dim Mask As String, posvar As Long, lenvar As Long, startvar As Long
Dim Mask2 As String
Dim TheMain As String ' 'MAIN' IS AN UNDOCUMENTED KEYWORD
Dim TheWord As String
Dim NewMain As String
Dim ReplaceMask As String
TheMain = "Send your comments to BASICally Speaking at bsp@infoms.com"


'Mask = "[a-z_.-]+@[a-z_.-]+"
Mask = "[html]+@[html]+"
dim nStart as long,s as string
nStart=1
Print mask
'mask =chgRe(mask)
'Print mask
REGEXPR$(Mask, TheMain, startvar, PosVar, LenVar)
'RegExpr Mask In TheMain To PosVar, LenVar
Print "REGEXPR returns:" & Mid$(TheMain, PosVar, lenVar)
Console_WaitKey
End Function


function AlternateSpelling()
Dim Mask As String, posvar As Long, lenvar As Long, startvar As Long
Dim Mask2 As String
Dim TheMain As String ' 'MAIN' IS AN UNDOCUMENTED KEYWORD
Dim TheWord As String
Dim NewMain As String
Dim ReplaceMask As String

Mask = "Colo[u]?r" ' a 'u' in the indicated position is optional
TheMain = " The color of the leaves is more brilliant than the colour of the television."


' INPUT: TheMain, Mask. OUTPUT: multiple REGEXPR results
PosVar = 1: StartVar = 1
While PosVar
REGEXPR$(Mask, TheMain, StartVar, PosVar, LenVar)
'RegExpr Mask In TheMain At StartVar To PosVar,Lenvar
If PosVar Then
TheWord = Mid$(TheMain, Posvar, LenVar)
Print TheWord
StartVar = PosVar + LenVar
End If
Wend
end function


Function PhoneNumbers()
Dim Mask As String, posvar As Long, lenvar As Long, startvar As Long
Dim Mask2 As String
Dim TheMain As String ' 'MAIN' IS AN UNDOCUMENTED KEYWORD
Dim TheWord As String
Dim NewMain As String
Dim ReplaceMask As String
Mask = "\([3 digits]\)-[3 digits]-[4 digits]"
Print mask
'mask=chgRe(mask)
'Mask = "\([0-9][0-9][0-9]\)-[0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]"
TheMain = " call me at (900)-123-4567"
REGEXPR$(Mask, TheMain, PosVar, LenVar)
'RegExpr Mask In TheMain To PosVar,LenVar
If PosVar Then Print Mid$(TheMain, PosVar, LenVar)
Console_WaitKey
end function


function FindEachWordInString()
Dim Mask As String, posvar As Long, lenvar As Long, startvar As Long
Dim Mask2 As String
Dim TheMain As String ' 'MAIN' IS AN UNDOCUMENTED KEYWORD
Dim TheWord As String
Dim NewMain As String
Dim ReplaceMask As String

TheMain = " Now is the time for all good men" & $CrLf & "to come to the aid of his party."
Let mask = "[1+ letters][wordboundary]" ' \b = word boundary. CRLF is (undocumented) word boundary
Print mask
'mask=chgRe(mask)
'GoSub RegExprLoop
PosVar = 1: StartVar = 1
While PosVar
REGEXPR$(Mask, TheMain, StartVar, PosVar, LenVar)
'RegExpr Mask In TheMain At StartVar To PosVar,Lenvar
If PosVar Then
TheWord = Mid$(TheMain, Posvar, LenVar)
Print TheWord
StartVar = PosVar + LenVar
End If
Wend
end function


function ThreewayAlternation()
Dim Mask As String, posvar As Long, lenvar As Long, startvar As Long
Dim Mask2 As String
Dim TheMain As String ' 'MAIN' IS AN UNDOCUMENTED KEYWORD
Dim TheWord As String
Dim NewMain As String
Dim ReplaceMask As String


TheMain = " Two is too many to do the job "
Mask = "(to[wordboundary])|(too[wordboundary])|(two[wordboundary])" ' works fine 2, 9, 18 found
Print mask
'mask=chgRe(mask)


Mask = "(to)|(too)|(two)\b" ' did not find too(9), but did find to (18) and Two (2) BUGBUGBUG
' Mask = "((to)|(too)|(two))\b" ' found Two (2) and to (18) but not too (9)
' Mask = "[(to)|(too)|(two)]\b" ' found single 'o' chararters at 4, 11, 19 and 22
' Mask = "[(to)|(too)|(two)]+\b" ' found Two(2), too(9), to (18) and 'o' at 22 (in 'do')
' GoSub RegExprLoop
PosVar = 1: StartVar = 1
While PosVar
REGEXPR$(Mask, TheMain, StartVar, PosVar, LenVar)
'RegExpr Mask In TheMain At StartVar To PosVar,Lenvar
If PosVar Then
TheWord = Mid$(TheMain, Posvar, LenVar)
Print TheWord
StartVar = PosVar + LenVar
End If
Wend
end function


function RegExprLineInput()
Dim Mask As String, posvar As Long, lenvar As Long, startvar As Long
Dim Mask2 As String
Dim TheMain As String ' 'MAIN' IS AN UNDOCUMENTED KEYWORD
Dim TheWord As String
Dim NewMain As String
Dim ReplaceMask As String
Dim TheFile as string,FileData as string
TheFile = "Regexpression.BAS"
FileData = LoadFile (TheFile)
'Print "Size of file is " & Str$(Len(FileData))
Console_WaitKey
StartVar = 1: PosVar = 1
Mask = "\n" ' \n = newline
While PosVar
REGEXPR$(Mask, FileData, StartVar, PosVar, LenVar)
'RegExpr Mask In FileData At StartVar To PosVar, LenVar
If PosVar Then
TheWord = Mid$(FileData, StartVar, PosVar - StartVar-1) ' NOTE: must remove the newline character
Print "x";TheWord;"x"
StartVar = PosVar + LenVar
End If
Wend
end function


function CompressSpaces()
Dim Mask As String, posvar As Long, lenvar As Long, startvar As Long
Dim Mask2 As String
Dim TheMain As String ' 'MAIN' IS AN UNDOCUMENTED KEYWORD
Dim TheWord As String
Dim NewMain As String
Dim ReplaceMask As String
dim retFromReg as string

TheMain = " The color of the leaves is more brilliant than the colour of the television."
Mask = "\x20[\x20]+" ' find space followed by one or more spaces
'mask =chgRe(mask)
Print mask + $crlf
ReplaceMask = "\x20" ' replace with a single space.
PosVar = 1 : StartVar = 1
Print "TheMain Begins as " & $Dq & TheMain & $Dq + $crlf
While StartVar
REGEXPR$(Mask, TheMain, StartVar, PosVar, LenVar)
retFromReg=Mid$(TheMain,PosVar,LenVar)

'replaces multiple spaces with one space
newMain = REPLACE$(TheMain, retFromReg, " ")


'RegRepl Mask In TheMain With ReplaceMask At StartVar To Posvar, NewMain
StartVar = PosVar
TheMain = NewMain
Wend
Print "TheMain Converted to " & $Dq & NewMain & $Dq + $crlf
end function


function ReplaceEachWordInStringWithplural()
Dim Mask As String, posvar As Long, lenvar As Long, startvar As Long
Dim Mask2 As String
Dim Main As String ' 'MAIN' IS AN UNDOCUMENTED KEYWORD
Dim TheWord As String
Dim NewMain2 As String
Dim ReplaceMask As String
dim retFromReg as string
dim newRetFromReg as string


Main = "Now is the time for all good men" & $CrLf
'Find each word in a string WORKS 9/17/99 even with embedded spaces, CRLF is an undocumented word boundary
mask = "([A-Za-z]+)[\x20]" ' not working
Print mask + $crlf

Main = "Now is the time for all good men" & $CrLf
print main
ReplaceMask = "\01s" ' for each word, append an 's'
StartVar = 1: PosVar =1
While StartVar
REGEXPR$(Mask, Main, StartVar, PosVar, LenVar)
retFromReg=Mid$(Main,PosVar,LenVar)

newRetFromReg=trim$(retFromReg) + "s "

StartVar = PosVar+lenVar

Main = REPLACE$(Main, retFromReg, newRetFromReg)
Wend

Print Main + $crlf
end function


function ParseCSVFile()
Dim Mask As String, posvar As Long, lenvar As Long, startvar As Long
Dim Mask2 As String
Dim TheMain As String ' 'MAIN' IS AN UNDOCUMENTED KEYWORD
Dim TheWord As String
Dim NewMain As String
Dim ReplaceMask As String
dim FileData as string


' file in: "Value","value", "value",crlf, "value", "value", "value", Crlf.....
FileData = $Dq & "Smith" & $Dq & "," & $Dq & "John" & $Dq & "," & $Dq & "555-1234" & $Dq & $CrLf & _
$Dq & "Doe" & $Dq & "," & $Dq & "Jane" & $Dq & "," & $Dq & "555-6789" & $Dq & $CrLf & _
$Dq & "Brown" & $Dq & "," & $Dq & "Willie" & $Dq & "," & $Dq & "555-8765" & $Dq & $CrLf


Dim WordMask As String


Mask = "\q(.*)\q"
Print mask + $crlf




Print FileData + $crlf
Print "*** END OF FILEDATA OF LEN=" & Str$(Len(FileData)) & "***" +$crlf


Console_WaitKey
dim retFromReg as string
dim newRetFromReg as string
PosVar = 1: StartVar = 1
While StartVar
REGEXPR$(Mask, FileData, StartVar, PosVar, LenVar)
retFromReg=Mid$(Main,PosVar,LenVar)

newRetFromReg=trim$(retFromReg)

StartVar = PosVar+lenVar

Main = REPLACE$(Main, retFromReg, newRetFromReg)
Wend

Print Main + $crlf


Print Filedata ' show the modified file
end function




function CreateDeclareFile()
dim TheFile as string
dim FileData as string

Dim Mask As String, posvar As Long, lenvar As Long, startvar As Long
Dim Mask2 As String
Dim TheMain As String ' 'MAIN' IS AN UNDOCUMENTED KEYWORD
Dim TheWord As String
Dim NewMain As String
Dim ReplaceMask As String




dim retFromReg as string
dim newRetFromReg as string
dim declaresFound as string
TheFile = "C:\thinBasic\SampleScripts\regularExpression.tbasic"
FileData = File2Text(TheFile)
Mask = "^[\x20]*((SUB)|(FUNCTION))[\x20]+[a-z]+"
Print mask + $crlf

' first line of SUB/FUNCTIONs which use _ continuation to next line
PosVar = 1
Print "START OUTPUT for Mask = " & mask + $crlf

PosVar = 1: StartVar = 1
While StartVar
REGEXPR$(Mask, FileData, StartVar, PosVar, LenVar)
retFromReg=Mid$(FileData,PosVar,LenVar)
declaresFound=declaresFound + "Declare "+retFromReg + $crlf

StartVar = PosVar+lenVar
Wend
'---------------------------------------------------------------------------------------
Print declaresFound + $crlf








end function


function FindAllComments_InSourceCode()
dim TheFile as string
dim FileData as string
dim mask as string
dim startvar as long
dim posVar as long
dim lenvar as long
dim retFromReg as string
TheFile = "C:\thinBasic\SampleScripts\regularExpression.tbasic"
FileData = File2Text(TheFile)
dim comments as string
Mask = "'[\x20]*[A-Za-z0-9 ]*"


PosVar = 1: StartVar = 1
While StartVar
REGEXPR$(Mask, FileData, StartVar, PosVar, LenVar)
retFromReg=Mid$(FileData,PosVar,LenVar)
comments=comments + retFromReg + $crlf

StartVar = PosVar+lenVar
Wend

Print comments + $crlf


end function




Function File2Text(sfn As String) As String


Dim st As String
Dim n As Long
Dim FileHandle As DWORD,s as string
FileHandle= FILE_OPEN(sfn, "INPUT")
while not FILE_EOF(FileHandle)
s=FILE_LineInput(FileHandle)
st=st+s+$crlf
wend

s = FILE_Close(FileHandle)
Function=st
End Function


Function bbb() As Long
' dummy function, used in FindAllProceduresInSourceCode; indented on purpose
End Function


Function ManyParameters (A As Single, B As Double, C As long, Z_A As String ) As Long
' dummy function for demo
End Function




'------------------