OOP code that extends OOP module
parseCSVFile extends parseCSV


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:

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