Инструменты пользователя

Инструменты сайта


atf:xml-хранилище

XML-хранилище (ATF 1.12)

Общее описание

Начиная с версии 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();
}

Функции

  • new_object("xmlarchive") - создать объект xml-хранилища
  • xmlarchive.loadfile(filename) - Считать xml-хранилище с данными ATF
  • xmlarchive.loadglobals() - Загрузить глобальные переменные из хранилища
  • xmlarchive.loadvar(name) - считать из хранилища знаечние с именем name
  • xmlarchive.newdocument(name) - создать новое xml-хранилище с именем name
  • xmlarchive.saveglobals() - сохранить все глобальные переменные
  • xmlarchive.savefile() - сохранить xml-хранилище на диск
  • xmlarchive.savevar(name, value) - сохранить значение value под именем name

См. также

atf/xml-хранилище.txt · Последние изменения: 2012/04/02 18:58 (внешнее изменение)