Вы можете импортировать в свой код данные из внешних SLK-файлов таблиц в структуры. Это бывает действительно удобно в системах, использующих базы данных. Формат SLK очень прост , а их использование может избавить вас от необходимости вручную редактировать код структуры.
Препроцессор импорта SLK-файлов имеет следующий синтаксис:
//! loaddata "path.slk"
чей принцип работы схож с препроцессором импорта..
Для успешного импорта данных, SLK таблицы и структуры должны следовать следующим правилам:
Для SLK
В SLK-файле, 1й столбец в 1й строке должен иметь имя, идентичное имени структуры, в которую данные импортируются. Каждый последующий столбец в 1й строке содержит имя атрибута структуры, в которые данные будут загружены.
Первый столбец каждой последующий строки содержит ключ, по которому данные будут получены из структуры.
Name | a | b | c | d | e |
---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 |
7 | 8 | 9 | 10 | 11 | 12 |
В примере выше, имя структуры, в которую данные будут импортированы - Name. Имена атрибутов структуры, в которые данные будут загружены - a, b, c, d, e. Ключи, по которым данные будут получены - 1 и 7.
Для структур
Структура, в которую данные будут импортированы (из примера выше, структура Name) должна определять статичный метод getFromKey, который вернет значения типа структуры.
Задача статичного метода getFromKey в простом преобразовании значении ключа (что принимается в качестве аргумента) в эквивалентную структуру. В нашем примере, метод getFromKey должен принимать аргумент в виде целочисленного значения.
Структура так же должна содержать атрибуты, указанные в импортируемом SLK-файле, но не обязывает указывать непременно все.
Итак, если мы имеет структуру вида
struct Name
integer a
integer b
integer c
integer d
integer e
static Name array values
static method getFromKey takes integer i returns Name
if (Name.values[i]!=0) then
set values[i] = Name.create()
endif
return Name.values[i]
endmethod
endstruct
и в то же время импортируем таблицу формата SLK, код инициализации структуры примет следующий вид:
set s = Name.getFromKey(1)
set s.a = 2
set s.b = 3
set s.c = 4
set s.d = 5
set s.e = 6
set s = Name.getFromKey(7)
set s.a = 8
set s.b = 9
set s.c = 10
set s.d = 11
set s.e = 12
Обратите внимание, что данный код будет выполнен уже после инициализации структур и библиотек.
Для лучше понимания, взгляните на пример импорта SLK, в составе дистрибутива JassHelper.