スペースで区切られたファイルの内容をリストとしてNetLogoに読み込むにはどうすればよいですか?たとえば、次のようなデータを含むファイルの場合:
2321 23233 2
2321 3223 2
2321 313 1
213 321 1
次のようなリストを作成したいと思います。
a[2321,2321,2321,213]
b[23233,3223,313,321]
c[2,2,1,1]
さて、ここにそれを行う単純な方法があります:
let a []
let b []
let c []
file-open "data.txt"
while [ not file-at-end? ] [
set a lput file-read a
set b lput file-read b
set c lput file-read c
]
file-close
ファイル内の項目数が 3 の倍数であると想定しています。そうでない場合、問題が発生します。
編集:
...そして、これははるかに長いですが、より一般的で堅牢な方法です。
to-report read-file-into-list [ filename ]
file-open filename
let xs []
while [ not file-at-end? ] [
set xs lput file-read xs
]
file-close
report xs
end
to-report split-into-n-lists [ n xs ]
let lists n-values n [[]]
while [not empty? xs] [
let items []
repeat n [
if not empty? xs [
set items lput (first xs) items
set xs but-first xs
]
]
foreach (n-values length items [ ? ]) [
set lists replace-item ? lists (lput (item ? items) (item ? lists))
]
]
report lists
end
to setup
let lists split-into-n-lists 3 read-file-into-list "data.txt"
let a item 0 lists
let b item 1 lists
let c item 2 lists
end