-
- Функции
Начиная с версии ATF 1.12 есть более удобный и простой способ сохранения данных в файлы: объект типа xmlarchive. Объекты этого типа представляют собой простой удобный интерфейс доступа к xml-файлам специального формата, в которых можно записывать данные переменных ATF
Объекты xmlarchive могут инициализироваться для чтения xml-файла или для записи в xml-файл. В первом случае после создания объекта (new_object(«xmlarchive»)) необходимо загрузить файл командой loadfile(filename), после чего можно считывать из него данные. Во втором случае вначале надо создать новый xml-файл командой newdocument(filename), записать в него данные, и созранить файл командой savefile(). Считывание и запись осуществляется командами savevar(name, value) и loadvar(name). Следующий простой пример демонстрирует как записать в файл данные при прекращении выполенения индикатора и считать при инициализации индикатора:
var balance; // Просто некоторые переменные var x; // предположительно испольщуемые var money; // роботом, которые мы сохраним function init() { var xml = new_object("xmlarchive"); xml.loadfile("file.xml"); balance = xml.loadvar("balance"); x = xml.loadvar("x"); money = xml.loadvar("money"); } function onStopIndicator(var reason) { var xml = new_object("xmlarchive"); xml.newdocument("file.xml"); xml.savevar("balance", balance); xml.savevar("x", x); xml.savevar("money", money); xml.savefile(); }
В примере выше все переменные оказались глобальными и мы задали им те же имена в XML-хранилище, что они имеют в программе. На самом деле можно сохранять произвольные данные под любыми именами (для имен можно использовать только латинский алфавит и цифры), в том числе в качестве сохраняемых переменных могут выстпать массивы и хеши - их сохранение ничем не отличается от обычных переменных. Однако если стоит цель сохранить именно глобальные переменные, то это можно сделать и проще, использовав функции saveglobals() и loadglobals():
function init() { var xml = new_object("xmlarchive"); xml.loadfile("file.xml"); xml.loadglobals(); x = xml.savevar("x"); money = xml.savevar("money"); } function onStopIndicator(var reason) { var xml = new_object("xmlarchive"); xml.newdocument("file.xml"); xml.saveglobals(); xml.savefile(); }