带表扩展的两个元素列表
问题描述:
我想为我的模型使用表扩展名。我的代码包括表:from-list命令来生成表。但是,我收到一个错误,说**“扩展异常:预计一个两元素列表”。我从两列数字数据的txt文件生成列表。显然这不是创建双元素列表的正确格式,但我找不到任何描述适当格式的文档。如何生成双元素列表?带表扩展的两个元素列表
另外,是否有可能建立一个超过两个元素的表?时间作为我的表中的关键,但我想建一个台,使得该键将更新三个不同的变量(因此一个四列的表:蜱变量1变量2 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浓度。列由空格分隔。
答
一个两个元素的列表是这样的:
[[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
]
您可以在表格中嵌入表格。因此,如果您想将多个值作为键值,只需为每个条目创建一个表并将它们放入主表中。
感谢亚瑟,我一直在使用你建议的方法。不幸的是,由于我现在正在使用的数据的大小,构建列表和表然后耗费时间。您是否有任何想法创建可直接从Excel电子表格中读取的表格的方法,而不需要经过时间来明确地构建表格?我的表正在增加,以包含一个**键列表**和近一百个**值**,用于不同的变量,当调用该键时必须更新这些变量。 – user3887089 2014-11-20 14:38:27
我不认为有这样做的方法。每次运行模型时都需要运行此代码的问题是否存在?如果是这样,您可以通过将表写入文件来跳过此操作。如果首先使用table:to-list将表转换为列表,然后使用file-write将其写入文件,则可以使用file-read和table:from-list将其再次转换回。我没有测试过它,但我无法想象它不会为你节省一些时间。虽然我现在不多。 – 2014-11-20 17:17:45
@ user3887089:建议您在其上开一个新问题 – 2014-11-20 17:30:14