Я использую моделирование теории игр в NetLogo, и теперь у меня есть много файлов данных, содержащих данные с перекрестными таблицами - каждый столбец хранит значение другой переменной и есть c. 1000 строк, содержащих данные. Я пытаюсь написать программу, которая будет принимать эти файлы и вычислять среднее значение для каждого столбца.NetLogo: чтение данных из входных файлов с переменными номерами строк
У меня есть программа, которая работает до тех пор, пока в каждом файле есть постоянное количество строк данных. Программа использует цикл команд чтения файлов для вычисления текущих итогов, которые затем делятся на нумер строк, считанных после того, как все строки были прочитаны.
Однако мои реальные файлы данных имеют переменное количество строк. Я пытаюсь изменить свой код, используя файл-на-конце? чтобы заставить его выйти из текущего цикла цикла после последней строки, но я не смог найти какой-либо способ его использования, который работает - я просто получаю сообщение об ошибке, указывающее, что файл находится в конце.
Пожалуйста, может кто-нибудь предложить способ справиться с этим? Я вставил рабочий код ниже.
-
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
Спасибо большое! Я не понимал, что могу использовать файл не в конце. У меня действительно есть определенное количество элементов данных в строке, так что это выглядит идеально. –