带表扩展的两个元素列表

问题描述:

我想为我的模型使用表扩展名。我的代码包括表: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-openfile-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 
] 

您可以在表格中嵌入表格。因此,如果您想将多个值作为键值,只需为每个条目创建一个表并将它们放入主表中。

+0

感谢亚瑟,我一直在使用你建议的方法。不幸的是,由于我现在正在使用的数据的大小,构建列表和表然后耗费时间。您是否有任何想法创建可直接从Excel电子表格中读取的表格的方法,而不需要经过时间来明确地构建表格?我的表正在增加,以包含一个**键列表**和近一百个**值**,用于不同的变量,当调用该键时必须更新这些变量。 – user3887089 2014-11-20 14:38:27

+0

我不认为有这样做的方法。每次运行模型时都需要运行此代码的问题是否存在?如果是这样,您可以通过将表写入文件来跳过此操作。如果首先使用table:to-list将表转换为列表,然后使用file-write将其写入文件,则可以使用file-read和table:from-list将其再次转换回。我没有测试过它,但我无法想象它不会为你节省一些时间。虽然我现在不多。 – 2014-11-20 17:17:45

+0

@ user3887089:建议您在其上开一个新问题 – 2014-11-20 17:30:14