我正在尝试读取和处理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: $,
.

其他提示

您可能希望查看squeaksource上的 csvparser 项目。它不应该在VisualWorks中工作。

这将为您提供支持所有CSV文件(例如,具有转义字符,引用字段等)

还看到这篇文章

有人移植 neocsv 解析器从pharo到VisualWorks。它可能解决你的问题。

可能是最快的方式加载包裹“ghcsvimportexport”。 然后你可以做:

| reader lines |
reader := CsvReader onFileNamed: aFilename.
[lines := OrderedCollection new.
[reader atEnd] whileFalse:
     [lines add: reader nextLine.]] 
     ensure: [reader close].
lines inspect.
.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top