集合中的元素在打印时被截断



我对Smalltalk非常陌生,所以如果我错误地实现了这个解决方案,请原谅我。

我正在从一个txt文件中读取一个表,看起来像这样:

1 3 5
2 4 7
55 30 50

我正在通过readStream读取文件,如下所示:

inStream := inFile readStream.

其中inFile为输入文件的地址。

inStream使用以下方法构建表:

readInput: inStream

| line |

rows := OrderedCollection new.
[ (line := inStream nextLine) notNil ] whileTrue: [ rows add: line.
Transcript 
  show: 'read line:';
  show: line;
  cr.
].

最后,我用这个方法打印特定的列:

printCols: columns
"comment stating purpose of instance-side method"
"scope: class-variables  &  instance-variables"

| columnsCollection |

columnsCollection := columns findTokens: ','.
rows do: [ :currentRow |
columnsCollection do: [ :each |
Transcript 
show: (currentRow at: (each asInteger) );
show: ' '.                                                                                          
].
Transcript cr.
].

其中columns是一个逗号分隔的列列表,我有兴趣打印作为字符串传入。

我不确定我的printCols函数有什么问题,但我看到的输出总是删除给定项目的第二个数字。例如,当打印第1列时,我将得到:

1
2
5

任何帮助都非常感谢!

正如Leandro Caniglia在帖子的评论中提到的,问题是currentRow是一个字符串,而我期望它是一个集合,因此,在columnsCollection循环中,我正在访问单个字符而不是来自集合的元素。

解决方案是改变我在行中读取的方式,以确保它们被视为集合的集合,而不是字符串的集合。

readInput: inStream
| line |

rows := OrderedCollection new.
[ (line := inStream nextLine) notNil ] whileTrue: [ |row|
row := OrderedCollection new.
row := line findTokens: ' '.
rows add: row.
].

谢谢你的帮助!

相关内容

  • 没有找到相关文章

最新更新