我试图在smalltalk(visualworks)中读取和处理csv文件的内容,但我似乎很难将字符串拆分成数组。下面是我能够开始工作的代码。我缺少的是将myLine变量的内容(一个以逗号分隔的字符串)拆分为字符串数组的片段,以添加到TwoDList中。请帮助您提供有关如何处理此问题的任何信息。谢谢
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.
答案 0 :(得分:6)
1)您也可以将字符串转换为流,这样您就可以使用相同的技术将文件解析为行:
myLine := (inStream upTo: Character cr) readStream.
[ myLine atEnd ] whileFalse: [ | myCell |
myCell := myLine upTo: $,.
"Do whatever with the cell" ]
2)您可以使用tokensBasedOn:
将字符串拆分为多个部分myLine tokensBasedOn: $,
答案 1 :(得分:3)
答案 2 :(得分:2)
Someone ported从Pharo到VisualWorks的NeoCSV解析器。它可能会解决您的问题。
答案 3 :(得分:1)
可能最快的方法是加载包裹“GHCsvImportExport”。 然后你可以这样做:
| reader lines |
reader := CsvReader onFileNamed: aFilename.
[lines := OrderedCollection new.
[reader atEnd] whileFalse:
[lines add: reader nextLine.]]
ensure: [reader close].
lines inspect.