I accidently posted here and felt kind of bad for not giving a decent answer.
so i knocked this up. I hope it helps:
this should handle reasonably complex files. keep in mind that 'proper' csv parsers probably can identify fields that have commas in them (usually by wrapping them in quotes:
john smith , "13444 lollypop lane,sarasota, fla" , meateater
the above would be 5 elements in my code but should be 3 elements. should not be too hard if that kind of complexity is what you are after. but to be honest, if you get to the point where you need *proper* CSV reading, you should maybe move on to XML. Brucey and John J both made excellent XML modules for Blitzmax
so i knocked this up. I hope it helps:
Local filename$ = "CSVTEST.csv" out=WriteStream(filename$) If Not out RuntimeError "Failed to open a WriteStream to file mygame.ini" WriteLine out,"comma, seperated , values" WriteLine out,"This,is,a,long,Line" WriteLine out,"" WriteLine out,"Let's see if it handles 6 consecutive commas ,,,,,," CloseStream out Print "File "+filename$+" created, bytes="+FileSize(filename$) in = OpenStream(filename$) While Not Eof( in) line_from_file$ = ReadLine(in) Local mycsv$[] = readcsv(Line_from_file$) For words:String = EachIn mycsv Print words Next Wend Function readCSV:String[]( csvline:String , delimeter:Int= 44 ) Local stringarray:String[1] Local word:String Local letter:Int Local L = Len(csvline) If L=0 Then Return Null For Local d:Int = 0 To L-1 If csvline[d] = delimeter ' default = comma ' , ' stringarray = stringarray[..Len(stringarray)+1] ' resize the array to add another character word$ = Null letter = 0 Else word$ = word+Chr(csvline[d]) stringarray[Len(stringarray)-1] = word letter:+1 EndIf Next Return stringarray End Function
this should handle reasonably complex files. keep in mind that 'proper' csv parsers probably can identify fields that have commas in them (usually by wrapping them in quotes:
john smith , "13444 lollypop lane,sarasota, fla" , meateater
the above would be 5 elements in my code but should be 3 elements. should not be too hard if that kind of complexity is what you are after. but to be honest, if you get to the point where you need *proper* CSV reading, you should maybe move on to XML. Brucey and John J both made excellent XML modules for Blitzmax