String 如何在Netlogo中逐行导入CSV?
如何从CSV文件导入数据并逐行转换,以便在程序中使用?我希望它是一个字符串,但我不断收到错误消息,它仍然是一个列表或列表列表 我试图复制Netlogo用户手册中给出的示例,以便每勾一行读取一个文件(见下文)。我创建了一个简单的示例String 如何在Netlogo中逐行导入CSV?,string,list,netlogo,String,List,Netlogo,如何从CSV文件导入数据并逐行转换,以便在程序中使用?我希望它是一个字符串,但我不断收到错误消息,它仍然是一个列表或列表列表 我试图复制Netlogo用户手册中给出的示例,以便每勾一行读取一个文件(见下文)。我创建了一个简单的示例 extensions [CSV] globals [date] to setup clear-all file-close-all file-open "S&PDate.csv" set date current-date reset-
extensions [CSV]
globals [date]
to setup
clear-all
file-close-all
file-open "S&PDate.csv"
set date current-date
reset-ticks
end
to go
if file-at-end? [stop]
set date current-date
tick
end
to-report current-date
file-open "S&PDate.csv"
let result csv:from-row file-read-line
while [ not file-at-end? ] [
let row csv:from-row file-read-line
set result (map result row)
]
file-close
report result
end
我的想法是一次将CSV数据作为列表导入,然后按刻度数(即逐行)从列表中提取值
希望能有帮助。如果您需要进一步的澄清,请告诉我。您能提供一些关于此代码段的额外注释吗@余江?嗨,斯图尔特。对不起,我添加了一些评论和说明。希望现在更清楚了。很棒的东西@yuJiang。谢谢你让StackoverFlow成为一个更好的地方。@maxNeumeyer你能接受这个答案吗?当然可以。谢谢--这一切都还在想。为什么要“一行一行”呢?这是要求吗?除非是一个大文件,否则只需使用
csv:from file
一次性读取整个文件即可。然后,您可以随时获取结果的任何项。(另外:您使用的map
不正确。)为什么希望结果是字符串?CSV是用于存储列表列表的格式。如果只需要文件的原始字符串内容,可以使用NetLogo中的内置文件-
原语。
extensions [csv]
globals [data variable]
to setup
file-close-all
file-open "S&PDate.csv"
;; read the data all at once by using csv:from-file
set data csv:from-file "S&PDate.csv"
reset-ticks
end
to go
if file-at-end? [stop]
;;extract value from the list, using item 0 to remove the list, and just keep the value
set variable item 0 item ticks data
tick
if ticks = length data [stop]
show variable
end