如何在Smalltalk中读取和处理CSV文件的内容

Kob*_*kie 6 smalltalk visualworks

我试图在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.
Run Code Online (Sandbox Code Playgroud)

小智 6

1)您也可以将字符串转换为流,因此您可以使用与将文件解析为行相同的技术:

myLine := (inStream upTo: Character cr) readStream.
[ myLine atEnd ] whileFalse: [ | myCell |
  myCell := myLine upTo: $,.
  "Do whatever with the cell" ]
Run Code Online (Sandbox Code Playgroud)

2)您可以使用tokensBasedOn将字符串拆分为多个部分:

myLine tokensBasedOn: $,
Run Code Online (Sandbox Code Playgroud)