如何,在Smalltalk,读取和处理CSV文件内容
-
12-12-2019 - |
题
我正在尝试读取和处理smalltalk(VeskiesWorks)中的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.
. 解决方案
1)您也可以将字符串转换为流,因此您可以使用相同的技术将文件解析为行:
myLine := (inStream upTo: Character cr) readStream.
[ myLine atEnd ] whileFalse: [ | myCell |
myCell := myLine upTo: $,.
"Do whatever with the cell" ]
.
2)您可以使用tokensbasedon将字符串拆分为片段:
myLine tokensBasedOn: $,
. 其他提示
可能是最快的方式加载包裹“ghcsvimportexport”。 然后你可以做:
| reader lines |
reader := CsvReader onFileNamed: aFilename.
[lines := OrderedCollection new.
[reader atEnd] whileFalse:
[lines add: reader nextLine.]]
ensure: [reader close].
lines inspect.
. 不隶属于 StackOverflow