gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 14:47:47 25 4
gpt4 key购买 nike

我是 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.
].

感谢您的帮助!

关于loops - 集合中的元素在打印时被截断 - Smalltalk,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69700784/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com