RetroCoders Community

Help => Help In Coding => Topic started by: ron77_db on Apr 08, 2022, 09:45 AM

Title: [SOLVED] trying to make a text parser
Post by: ron77_db on Apr 08, 2022, 09:45 AM
hello I'm trying to make a simple word/text parser in freebasic

here is the code I have so far:

'PROGRAM TO PARSR TEXT STRING BY RON77 8/4/2022


'APPEND TO the STRING array the STRING item
SUB sAppend(arr() AS STRING , Item AS STRING)
    'if the array is empty make it start as the lbound index not ubound (or 0 or 1, whatever...)
    var iUbound = iif( ubound(arr)<lbound(arr) , lbound(arr) , ubound(arr) )
    REDIM PRESERVE arr(LBOUND(arr) TO iUbound+1) AS STRING
    arr(UBOUND(arr)) = Item
END SUB

dim shared SParsed(100) as string

sub ToParese( sText as string )
    dim wordstart as integer
    dim wordend as INTEGER
    wordstart = 1
    dim counter as long
    counter = 0
    dim wordString as string
    for i as integer = 1 to len( sText)
        wordend = instr( sText, " ")
        wordString = mid(sText, wordstart, wordend)
        SParsed(counter) =  wordString
        wordstart = wordend + 1
        counter += 1 
       
    Next
End Sub

dim sT as STRING

input "enter sentence: ", sT

ToParese(sT)

for i as integer = 0 to ubound(SParsed)
    if SParsed(i) <> "" then print SParsed(i)
Next

sleep

the parser code doesn't work as expected here is the output in terminal:

enter sentence: hi i'm ron
hi
i'm
i'm
i'm
i'm
i'm
i'm
i'm
i'm
i'm


need help in fixing it... and understand what is wrong it seems that only the first word is paresed then it just stuck at the second word

ron77
Title: Re: [HELP] trying to make a text parser
Post by: ron77_db on Apr 08, 2022, 09:54 AM
hello made some modifications to the code but still, the parser code doesn't parse correctly

here is the updated code:

'PROGRAM TO PARSR TEXT STRING BY RON77 8/4/2022


'APPEND TO the STRING array the STRING item
SUB sAppend(arr() AS STRING , Item AS STRING)
'if the array is empty make it start as the lbound index not ubound (or 0 or 1, whatever...)
var iUbound = iif( ubound(arr)<lbound(arr) , lbound(arr) , ubound(arr) )
REDIM PRESERVE arr(LBOUND(arr) TO iUbound+1) AS STRING
arr(UBOUND(arr)) = Item
END SUB

dim shared SParsed(100) as string

sub ToParese( sText as string )
dim wordstart as integer
dim wordend as INTEGER
wordstart = 1
dim counter as long
counter = 0
dim wordString as string
for i as integer = 1 to len( sText)
wordend = instr( i, sText, " ")
if wordend <> 0 then
wordString = mid(sText, wordstart, wordend)
SParsed(counter) =  wordString
wordstart = wordend + 1
counter += 1   
end if
Next
End Sub

dim sT as STRING

input "enter sentence: ", sT

ToParese(sT)

for i as integer = 0 to ubound(SParsed)
if SParsed(i) <> "" then print SParsed(i)
Next

sleep

the output of the code:

enter sentence: hi i'm ron
hi
i'm
i'm
i'm ron
ron
ron
ron

Title: Re: [SOLVED] trying to make a text parser
Post by: ron77_db on Apr 08, 2022, 11:03 AM
well, i found a resource on freebasic forum by Imortis seems like he made a tutorial once about QB/FB text parser...

here is the link to the tutorial: http://www.petesqbsite.com/sections/express/issue16/index.html#parse (http://www.petesqbsite.com/sections/express/issue16/index.html#parse)

and with this guide I was able to modify the code to this:

'PROGRAM TO PARSR TEXT STRING BY RON77 8/4/2022


'APPEND TO the STRING array the STRING item
SUB sAppend(arr() AS STRING , Item AS STRING)
'if the array is empty make it start as the lbound index not ubound (or 0 or 1, whatever...)
var iUbound = iif( ubound(arr)<lbound(arr) , lbound(arr) , ubound(arr) )
REDIM PRESERVE arr(LBOUND(arr) TO iUbound+1) AS STRING
arr(UBOUND(arr)) = Item
END SUB

dim shared Parsed(100) as string

sub ToParese( ToParse as string )
Dim CurrentPosition as Integer
Dim CurrentCharacter as String
Dim WordCount as Integer
Dim WordSize as Integer
dim wordString as string
for CurrentPosition = 1 to Len(ToParse)
CurrentCharacter = MID(ToParse,CurrentPosition,1)
Select Case CurrentCharacter
Case " "
If Not WordSize = 0 Then
Parsed(WordCount + 1) = MID(ToParse, CurrentPosition - WordSize, WordSize)
End If
WordCount = WordCount + 1   
WordSize = 0
case else
WordSize = WordSize + 1
End Select
If CurrentPosition = Len(ToParse) Then
WordSize = WordSize - 1
Parsed(WordCount + 1) = MID(ToParse, CurrentPosition - WordSize, WordSize + 1)
End If
Next CurrentPosition
Parsed(0) = MKI(WordCount)
End Sub

dim sT as STRING

input "enter sentence: ", sT

ToParese(sT)

for i as integer = 0 to ubound(Parsed)
if Parsed(i) <> "" then print Parsed(i)
Next

sleep

here is the output:

enter sentence: hi i'm ron nice to meet you
       
hi
i'm
ron
nice
to
meet
you