高效的CSV提取和分配

时间:2017-02-24 11:34:42

标签: netlogo

我试图找到一种更简洁/更有效的方法,因为我不相信我无法提高效率。

我有一个csv文件,其中包含我的海龟初始状态的数据。每行代表乌龟拥有的变量的值,每列代表一只单独的乌龟。对于每只乌龟,我想初始化他的变量。在这一刻,我按照以下方式进行(这有效,但对我来说效率不高):

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; GENERAL PROCEDURES ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

extensions [ csv ]

breed[households household] 

globals ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
[
 HH-data
 HHx-list
 HHy-list
 HHsize-list
 HHcolor-list
]

households-own ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
[
  HHx
  HHy
  HHsize
  Hhcolor
]

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; SETUP PROCEDURES ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

to startup ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

set HH-data (csv:from-file "TestHH.csv" ";")
show HH-data
set HHx-list item 0 HH-data
set HHy-list item 1 HH-data
set HHsize-list item 2 HH-data
set HHcolor-list item 3 HH-data
show HHx-list
let numberOfHH length HHx-list
create-households numberOfHH
(
foreach (sort households) HHx-list
  [ [?1 ?2] -> ask ?1
    [
      set xcor ?2
    ]
  ]
)
(
  foreach (sort households) HHy-list
  [ [?1 ?2] -> ask ?1
    [
      set ycor ?2
    ]
  ]
)
(
  foreach (sort households) HHsize-list
  [ [?1 ?2] -> ask ?1
    [
      set HHsize ?2
    ]
  ]
)
(
  foreach (sort households) HHcolor-list
  [ [?1 ?2] -> ask ?1
    [
      set color ?2
    ]
  ]
)
end ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

但是,在全球HH数据中,我的所有数据都已存在。我怎样才能提取这个并将乌龟变量分配给每只乌龟,而不必为每个语句制作所有这些单独的东西。我试过这样的事情:

set HH-data (csv:from-file "TestHH.csv" ";")
show HH-data

let numberOfHH length (item 0 HH-data)
create-households numberOfHH

(
  foreach (sort households) HH-data
  [[?1 ?2] -> ask ?1
    [
      set xcor ?2
      set ycor ?2
      set HHsize ?2
      set HHcolor ?2
    ]
  ]
)

然后我不断收到错误。

1 个答案:

答案 0 :(得分:0)

在我写这个问题时,发现自己,如何解决它。 认为它可能对其他人有用,因此仍然可以发布它。

set HH-data (csv:from-file "TestHH.csv" ";")
;;show HH-data

let numberOfHH length (item 0 HH-data)
create-households numberOfHH

(
  foreach (sort households) (item 0 HH-data) (item 1 HH-data) (item 2 HH-data) (item 3 HH-data)
  [[?1 ?2 ?3 ?4 ?5] -> ask ?1
    [
      set xcor ?2
      set ycor ?3
      set HHsize ?4
      set color ?5
    ]
  ]
)