2015-03-23 2 views
1
спросить
breed[inboxturtles inboxturtle] 
to check 
    create-inboxturtles 100[setxy random-xcor random-ycor] 
    file-open "D:\\hello.csv" 
    file-write "X Coordinate" file-write "," file-write "Y Coordinate" file-write "," 
    file-write "Who" file-print "" 
     ask inboxturtles [ 
     file-print "" 
     file-write xcor file-write "," 
     file-write ycor file-write "," 
     file-write who 
     ] 
    file-close 
    end 

Я не знаю, file-print не работает в ask, но она работает вне его, конечно. Может кто-нибудь помочь мне, что я делаю неправильно здесь?файлов печати не похоже на работу в

+0

Код выглядит корректно для меня. Какие у вас есть доказательства того, что это не работает? Как выглядит результирующий файл? –

+0

В этой проблеме возникла проблема с моим редактором в Windows. –

+0

Ах, дубликат http://stackoverflow.com/q/3455089/86485, затем –

ответ

2

отлично работает для меня:

"X Coordinate" "," "Y Coordinate" "," "Who" 

-11.273903984790302 "," 11.589865065737627 "," 60 
-3.198704310517442 "," -2.327808927515365 "," 6 
13.485197306065764 "," -3.747989432973762 "," 91 
16.085782333733263 "," 13.530031781112555 "," 35 
... 

Кстати, вы должны использовать file-type вместо file-write для записи в файл без добавления новой строки.

file-write делает странные вещи, такие как кавычки во всех строках (поэтому запятые являются кавычками в вышеприведенном выходе).

Еще лучше, вы должны использовать word, чтобы объединить строки вместо file-write (или file-type) снова и снова. Я хотел бы написать этот код так:

to check 
    create-inboxturtles 100[setxy random-xcor random-ycor] 
    file-open "D:\\hello.csv" 
    file-print "X Coordinate,Y Coordinate,Who" 
    ask inboxturtles [ 
    file-print (word xcor "," ycor "," who) 
    ] 
    file-close 
end 

Это выводит:

X Coordinate,Y Coordinate,Who 
-5.409837709344972,-0.6301891295194455,165 
15.024747417946124,-9.591123025568086,193 
9.735972095912903,-3.935540025692582,176 
-11.505336629875304,-12.082889705829679,103 
-10.19902536584426,-14.86360155896942,85 
-5.928287603043071,7.175770417278386,22 
-10.538908046584938,-15.009427435006804,120 
... 

, который, вероятно, больше того, что вы хотите. Кстати, в CSV нормально иметь пробелы в строках, не помещая кавычки вокруг них. Единственный раз, когда вам нужны кавычки, - это когда сами строки содержат запятые.

Наконец, обратите внимание, что если файл уже существует, он будет просто добавлен, а не перезаписан. Поэтому вам может понадобиться что-то вроде if file-exists? filename [ file-delete filename ] до file-open.

+0

Отлично! Спасибо за подробный ответ. Проблема с моим редактором в Windows возникла по той проблеме, которую я задал. Ваш другой совет действительно помог! Еще раз спасибо. –

2

Вместо этого использовать file-type. Если вам действительно нужны котировки вокруг строк, вы можете добавить их.

breed[inboxturtles inboxturtle] 

to check 
    file-open "c:/temp/temp.csv" 
    file-type xcor 
    file-type "," file-type ycor 
    file-type "," file-type who 
    file-print "" 
    file-close 
end 

to setup 
    ca 
    carefully [file-delete "C:/temp/temp.csv"] [] 
    file-open "C:/temp/temp.csv" 
    file-type "\"X Coordinate\"" 
    file-type "," file-type "\"Y Coordinate\"" 
    file-type "," 
    file-type "\"Who\"" 
    file-print "" 
    file-close 
    create-inboxturtles 100[setxy random-xcor random-ycor] 
end 

to go 
    ask inboxturtles [check] 
end 
Смежные вопросы