Jim;
Script creates xml output from .net DataTable (created from .csv) - could easily be modified for different file or db table and there are schema options for the writexml() method. Should be easily consumed by your Extender.
;Winbatch 2020A
;Parsing csv with VisualBasic Text Parser
;output as xml
;Text Parser should be included with .NET
;Stan Littlefield 2/13/2021
;/////////////////////////////////////////////////////////////////////////////////////
gosub udfs
IntControl(73,1,0,0,0)
delim="," ;for tab-delimited use num2char(9)
folder = dirscript()
file=folder:"dowj.txt"
cFile = Dirscript():"dowj.xml"
tblName = "DOW"
If ! FileExist(file) Then Terminate(@TRUE,"Cannot Continue",file:" is missing")
BoxOpen("Processing ":file,"Setting Up...")
ObjectClrOption('Appbase', Dirscript())
ObjectClrOption("useany","System")
ObjectClrOption("useany","System.Data")
ObjectClrOption("useany","Microsoft.VisualBasic")
;load file into Text Parser and create .NET Data Table
oParser = ObjectClrNew('Microsoft.VisualBasic.FileIO.TextFieldParser',file)
oParser.TextFieldType = ObjectClrType('Microsoft.VisualBasic.FileIO.FieldType',0)
oParser.SetDelimiters(delim)
oTable = ObjectClrNew('System.Data.DataTable',tblName)
bTrue = ObjectType( "BOOL", -1 )
bFalse = ObjectType( "BOOL", 0 )
oType = ObjectClrNew('System.Type')
cFields = oParser.ReadFields()
nFields = ArrInfo(cFields,1)
ForEach f in cFields
oTable.Columns.Add(f)
Next
oColumn=0
oCols = oTable.Columns
While ! oParser.EndOfData
cFields = oParser.ReadFields()
BoxText("Parsing Line ":oParser.LineNumber)
oTable.Rows.Add(cFields)
EndWhile
BoxText("Creating XML Output")
cWriter = ObjectClrNew('System.IO.StringWriter')
oTable.WriteXml(cWriter,bTrue)
FilePut(cFile,cWriter.ToString())
oTable=0
oParser.Close()
oParser.Dispose()
cReader.Dispose
oGC = ObjectClrNew('System.GC')
oGC.Collect(0)
BoxShut()
If FileExist(cFile) Then Pause("XML File Created",cFile)
Exit
:WBERRORHANDLER
geterror()
Message("Error Encountered",errmsg)
Exit
:udfs
#DefineSubRoutine geterror()
wberroradditionalinfo = wberrorarray[6]
lasterr = wberrorarray[0]
handlerline = wberrorarray[1]
textstring = wberrorarray[5]
linenumber = wberrorarray[8]
errmsg = "Error: ":lasterr:@LF:textstring:@LF:"Line (":linenumber:")":@LF:wberroradditionalinfo
Return(errmsg)
#EndSubRoutine
Return