我对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.
].
谢谢你的帮助!