I am attempting to read and process the contents of a csv file in smalltalk(visualworks), but I seem to be having some hard time getting the string to split into an array please. Below is code I have been able to get working. What I am missing is the piece that splits the content of myLine variable, which is a comma-delimited string, into an array of strings, to be added to a TwoDList. Please help with any information you may have on how to approach this please. Thanks
SpreadsheetReadCSV: inFilename
|inStream myLine rcnt|
rcnt := 0.
" scan thru the text lines, using a traditional i/o loop "
inStream := (inFilename asFilename) readStream .
[ inStream atEnd ] whileFalse: [
rcnt := rcnt + 1.
myLine := inStream upTo: Character cr.
"Process the commadelimited string here"
].
inStream inspect.
inStream close.
^myLine.
1) You can turn a string into a stream as well, so you can use the same technique you used to parse the file into lines:
myLine := (inStream upTo: Character cr) readStream.
[ myLine atEnd ] whileFalse: [ | myCell |
myCell := myLine upTo: $,.
"Do whatever with the cell" ]
2) You can split a string into pieces using tokensBasedOn:
myLine tokensBasedOn: $,