2014-10-18 21 views
1

我想爲我的模型使用表擴展名。我的代碼包括表: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濃度。列由空格分隔。

回答

2

一個兩個元素的列表是這樣的:

[[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