集合中的元素在打印时被截断 - Smalltalk
Elements from collection get truncated when printing - Smalltalk
我对 Smalltalk 非常陌生,所以如果我没有正确地实施这个解决方案,请原谅。
我正在从如下所示的 txt 文件中读取 table:
1 3 5
2 4 7
55 30 50
我正在通过 readStream 读取文件,如下所示:
inStream := inFile readStream.
其中 inFile
是输入文件的地址。
inStream
用于使用此方法构建 table:
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 在 post 的评论中提到的,问题是 currentRow
是一个字符串,而我期望它是一个集合,因此,在 columnsCollection
循环,我正在访问单个字符而不是集合中的元素。
解决方案是更改我在行中的阅读方式,以确保它们被视为集合的集合而不是字符串的集合。
readInput: inStream
| line |
rows := OrderedCollection new.
[ (line := inStream nextLine) notNil ] whileTrue: [ |row|
row := OrderedCollection new.
row := line findTokens: ' '.
rows add: row.
].
感谢您的帮助!
我对 Smalltalk 非常陌生,所以如果我没有正确地实施这个解决方案,请原谅。
我正在从如下所示的 txt 文件中读取 table:
1 3 5
2 4 7
55 30 50
我正在通过 readStream 读取文件,如下所示:
inStream := inFile readStream.
其中 inFile
是输入文件的地址。
inStream
用于使用此方法构建 table:
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 在 post 的评论中提到的,问题是 currentRow
是一个字符串,而我期望它是一个集合,因此,在 columnsCollection
循环,我正在访问单个字符而不是集合中的元素。
解决方案是更改我在行中的阅读方式,以确保它们被视为集合的集合而不是字符串的集合。
readInput: inStream
| line |
rows := OrderedCollection new.
[ (line := inStream nextLine) notNil ] whileTrue: [ |row|
row := OrderedCollection new.
row := line findTokens: ' '.
rows add: row.
].
感谢您的帮助!