首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NetLogo:从具有可变行数的输入文件中读取数据

NetLogo:从具有可变行数的输入文件中读取数据
EN

Stack Overflow用户
提问于 2010-02-11 17:54:19
回答 1查看 3.8K关注 0票数 4

我一直在用NetLogo运行博弈论模拟,现在我有很多数据文件,其中包含交叉表数据-每列存储不同变量的值,大约有1000行包含数据。我正在尝试编写一个程序,它将获取这些文件并计算每一列的平均值。

我有一个程序,只要在每个文件中有恒定数量的数据行就可以工作。该程序使用文件读取命令的循环来计算运行总数,然后在读取所有行之后,将其除以读取的行数。

但是,我的真实数据文件的行数是可变的。我一直在尝试使用file-at-end修改我的代码。为了让它在最后一行之后退出正在运行的total循环,但我还没有找到任何可行的方法-我只是得到了一个错误,告诉我文件已经结束了。

有没有人能建议一下处理这个问题的方法?我已经粘贴了下面的工作代码。

--

代码语言:javascript
复制
globals [target-file-name  
current-tally-file  
lines-read  
coops-fixed-run cheats-fixed-run either-fixed-run coop-freq-min-run  
coop-freq-max-run coop-freq-mean-run ticks-run  
num-lines  
]  

to setup  
set target-file-name user-input "Type a name for the target file"  
file-open target-file-name  
file-print("TallyFile Reps pFixCoop pFixCheat pFixEither MeanMinCoop MeanMaxCoop MeanMeanCoop")  
file-close  
set num-lines read-from-string user-input "How many lines in the file to be processed?" 
end 

to go  
set current-tally-file user-file  
file-open current-tally-file  
set lines-read 0  

while [lines-read < num-lines][  
let in1 file-read set coops-fixed-run (coops-fixed-run + in1)  
let in2 file-read set cheats-fixed-run (cheats-fixed-run + in2)  
let in3 file-read set either-fixed-run (either-fixed-run + in3)  
let in4 file-read set coop-freq-min-run (coop-freq-min-run + in4)  
let in5 file-read set coop-freq-max-run (coop-freq-max-run + in5)  
let in6 file-read set coop-freq-mean-run (coop-freq-mean-run + in6)  
let in7 file-read set ticks-run (ticks-run + in7)    
set lines-read (lines-read + 1)   
]  

stop-and-clear  
end  


to stop-and-clear  

let pfixcoop (coops-fixed-run / lines-read)  
let pfixcheat (cheats-fixed-run / lines-read)  
let pfixeither (either-fixed-run / lines-read)  
let mean-of-mins (coop-freq-min-run / lines-read)  
let mean-of-maxs (coop-freq-max-run / lines-read)  
let mean-of-means (coop-freq-mean-run / lines-read)  
let mean-of-ticks (ticks-run / lines-read)  

file-open target-file-name  
file-print (word current-tally-file " " lines-read " " pfixcoop " " pfixcheat "
" pfixeither " " mean-of-mins " " mean-of-maxs " " mean-of-means " "
mean-of-ticks)  
file-close  


set coops-fixed-run 0  
set cheats-fixed-run 0  
set either-fixed-run 0  
set coop-freq-min-run 0  
set coop-freq-max-run 0  
set coop-freq-mean-run 0  
set ticks-run 0  
set lines-read 0  

stop  

end  
EN

回答 1

Stack Overflow用户

发布于 2010-02-11 19:27:49

从文件中读取所有行的方法如下:

代码语言:javascript
复制
to read-file [filename]
  file-open filename
  while [not file-at-end?][
    ;read one line
    let in1 file-read
    let in2 file-read
    ;and so one, at the end you will probably want to put these into some global variable
    set global-in1 fput in1 global-in1
  ]
  file-close filename
end

这里假设所有行都有数据项的名称number,并且您知道这个数字是什么。否则只需使用file-read-line而不是file-read

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2243584

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档