我正在尝试为我的模型使用表扩展名。我的代码包含 table:from-list 命令来生成表。但是我得到一个错误说**“扩展异常:期望一个双元素列表”。我从txt文件生成列表,该文件是两列数值数据。显然这不是创建双元素列表的正确格式,但我找不到任何描述适当格式的文档。如何生成双元素列表?
此外,是否可以构建一个包含两个以上元素的表?时间在我的表中作为键,但我想建立一个表,这个键将更新三个不同的变量(因此是一个四列表: ticks variable1 variable2 variable3 )
我还欢迎任何用于学习表格和数组扩展的良好资源(我已经查看了扩展指南但尚未掌握它)。
extensions [table]
Globals
[
list-O2
table-O2
]
to setup
make-lsolutes ; loads lists for solute data (based on node 96)
make-tsolutes
to go
if table:has-key? table-O2 ticks
[ update-from-FEM]
tick
end
to make-lsolutes
ifelse ( file-exists? "96O214day.txt" )
[
set list-O2 []
file-open "96O214day.txt"
while [ not file-at-end? ] [set list-O2 lput file-read list-O2]
file-close
]
[ user-message "There is no 96O214day.txt file in current directory!" ]
end
to make-tsolutes
set table-O2 table:from-list list-O2
end
to update-from-FEM
ask insulation
[ set O2 table:get table-O2 ticks]
end
制作溶质列表的txt文件有两列。左列是时间,右列是O2浓度。列由空格分隔。
答案 0 :(得分:2)
两元素列表如下所示:
[[key1 val1][key2 val2][keyn valn]]
我会使用file-open
,file-read-line
和while [not file-at-end?]
原语来迭代您的输入,并使用String primitives从输入文件中创建配对列表。类似的东西:
let the-list []
file-open filename.txt
while [not file-at-end?][
let input file-read-line
;; find the start and end position/index of key and value (X,Y,O,P) using the position primitive on your delimiter
let key substring input X Y
let value substring input O P
let the-pair (list key value)
set the-list lput the-pair the-list
]
您可以在表格中嵌入表格。因此,如果您想要多个值作为键值,只需为每个条目创建一个表并将它们放在主表中。