Extends ParseCSV: OOP code
OOP code that extends OOP module
parseCSVFile extends parseCSV
Code:
Uses "console"
uses "File"
'Extends CSV parsing module with file handling'
Type ParseCsv
Private
mainstring as string
Delimiter As String
posString as long
Public
Function _Create(ByVal txt_in As String) As Long
'---------------------------------------------------
me.mainstring=txt_in
me.Delimiter=","
End Function
Function Chg_ParseCVS(ByVal txt_in As String)
'---------------------------------------------------
me.mainstring=txt_in
End Function
Function ParseInsert (index As Long ) As String
'add delimiter position inside string ParseInsert("aa,bb,cc", "," ,2) would give aa,,bb,cc
if (index > 0) then
if (index > parsecount(me.mainstring,me.delimiter) + 1) Then
function =me.mainstring
exit function
end if
index= index -1
if index = 0 then
function = me.delimiter + me.mainstring
exit function
end if
me.posString = instr(1,me.mainstring, me.delimiter,index)
if me.posString=0 Then
me.mainString = me.mainString+me.delimiter
'? me.mainString
else
me.mainString=mid$(me.mainstring,1,me.posString-1) + me.delimiter + mid$(me.mainstring,me.posString )
'? me.mainString
end if
Else
me.mainstring
'? ? me.mainString
exit Function
end if
End Function
Function ParseDelete(index AS Long) AS String
'deletes a indexed position inside string
dim Cnt AS Long
dim cntMinusDelimiter as long
Local Txt AS String
If Len(me.MainString) = 0 Then
exit function
'Function = me.MainString
Else
Cnt = instr(1,me.MainString,me.delimiter,index)
Txt = Parse$(me.MainString, me.delimiter, index)
cntMinusDelimiter=cnt-len(txt)-1
if cnt=0 then
me.MainString =mid$(me.MainString,1,cntMinusDelimiter)
else
me.MainString =mid$(me.MainString,1,cntMinusDelimiter) + mid$(me.MainString,Cnt+len(me.delimiter))
end if
End If
End Function
Function ParseReplace( IndxStart As Long, NewFields As String) As String
dim separator as string, textline as string
separator = me.Delimiter
textline = me.mainstring
Local Pos1 As Long, Pos2 As Long, I As Long, J As Long
dim astrings as string,allstr as string
j = ParseCount(TextLine, Separator)
For I = 1 To ParseCount(TextLine, Separator)
astrings=parse$(me.mainstring,me.Delimiter,i)
if indxstart = i then
astrings = newFields
end if
if j = i then
allstr += astrings
else
allstr += astrings + ","
end if
Next
me.mainstring = allstr
'function =allstr
End Function
function PrintOut()
'---------------------------------------------------
PrintL " mainstring :", Me.mainstring
End function
function ToVariable()as string
'---------------------------------------------------
function = Me.mainstring
End function
function parseNew(index as long) as string
function = Parse$(me.mainstring,me.delimiter,index)
end function
function parseCnt() as long
function = parsecount(me.mainstring,me.delimiter)
end function
end type
'=================================parseCSVFile=======================================
type parseCSVFile extends parseCSV
private
mainfile as string
fileline as string
fileDelimiter as string
public
allLinesfile as string
Function _Create(ByVal file_in As String) As Long
'---------------------------------------------------
me.mainfile=file_in
'me.Delimiter=","
me.fileDelimiter = $crlf
End Function
Function File2Text()
Dim st As String
Dim n As Long
Dim FileHandle As DWORD,s as string
FileHandle= FILE_OPEN(me.mainfile, "INPUT")
while not FILE_EOF(FileHandle)
s=FILE_LineInput(FileHandle)
me.allLinesfile=me.allLinesfile+s+$crlf
wend
s = FILE_Close(FileHandle)
'Function=st
End Function
function parseCntFile() as long
function = ParseCount(me.allLinesfile,me.fileDelimiter)
end function
function Text2File(sfn As String)
Dim FileHandle As DWORD,s as string
FileHandle= FILE_OPEN(sfn, "OUTPUT")
s = FILE_LinePrint(FileHandle, me.allLinesfile)
s = FILE_Close(FileHandle)
end function
end type
'=====================================================================
dim main as string
dim i as long
'change the file to directory
Dim c1 As parseCSVFile("C:\thinBasic\SampleScripts\csvBills2023.txt") 'CSV string (comma delimited)
'puts all lines in file in allLinesfile
c1.File2Text()
dim a as string,allLines as string
'ParseCntFile counts lines in file
for i=1 to c1.ParseCntFile()
c1.mainstring= parse$(c1.allLinesfile,$crlf,i)
a = c1.parseNew(3)
if a<> "" and instr(a,"$") =0 then
a=trim$(a)
c1.parseReplace(3,"$" + a)
sleep 500
printl c1.mainstring
end if
'c1.allLinesfile = ""
allLines += c1.mainstring + $crlf
next
c1.allLinesfile = alllines
c1.Text2File("C:\thinBasic\SampleScripts\temp.txt")
printl("")
Printl("======All file lines=======================")
printl(c1.allLinesFile)
Console_WaitKey
Text file for testing
Save text below as file for the above code:
Code:
01 , CC , $34.42 , 408892
01 , CB , $110.22 , 108287803
01 , DK , 405.72 , 16552914011823
01 , MRC , 386.47 , 894264795
01 , GECU , 210.78 , 056960456
01 , SD1 , $45.91 , 2829157706
01 , PNC , $59.79 , 569805