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
'------------------
'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
'------------------