6. Глава IV. Команди реализирани със средствата на езика за управление на базите
Това към момента са команди реализиращи различни видове цикли и такива за архивиране и разархивиране на база или части от нея.
6.1 Команди разширяващи възможностите на езика
Примери за използването на следващите команди има в папката “libs/src” от демонстрационния пакет описан в раздела “Какво ни е необходимо преди да продължим?”.
6.1.1 Цикли
6.1.1.1 Команда { ?. } за цикъл ДОКАТО. По аналогия с цикъла while в други програмни езици.
ДОКАТО:#[=;{ ?. };[
#[==;true;{CONDITION};[
{BODY}
#[{ ?. };[{CONDITION}];[{BODY}]]
];
]
]
]
#[=.;{ ?. };{CONDITION};{BODY}]
ДОКАТО:#[cout;
#[.=;i;1]
#[{ ?. };
[ #[>=n;5;##[i];[true];] ]; #[#; <== CONDITION ]
[ #[#; <== BODY ]
##[i]##[chr;10]
#[.=;i;#[fmtd;%0.0f;#[+;##[i];1]]]
]
]
]
6.1.1.2 Команда { .? } за цикъл ПРАВИ ДОКАТО. По аналогия с цикъла do while в други програмни езици.
ПРАВИ ДОКАТО:#[=;{ .? };[
{BODY}
#[==;true;{CONDITION};[
#[{ .? };[{BODY}];[{CONDITION}]]
];
]
]
]
#[=.;{ .? };{BODY};{CONDITION}]
ПРАВИ ДОКАТО:#[cout;
#[ base ;docbases/zzzbase]
#[ open the base for reading. ;[
#[{ .? };
[ #[#; <== BODY ]
#[ get ]#[ new line ]
];
[ #[ next? ] ] #[#; <== CONDITION ]
]
]]
]
6.1.1.3 Команда { _?._ } за цикъл ПРАВИ ЗА ВСЕКИ. По аналогия с цикъла for в други програмни езици.
ПРАВИ ЗА ВСЕКИ:#[=;{ _?._ };[
{INIT}
#[{ ?. };[{CONDITION}];[{BODY}]]
{CLEAN}
]
]
#[=.;{ _?._ };{INIT};{CONDITION};{BODY};{CLEAN}]
ПРАВИ ЗА ВСЕКИ:#[cout;
#[{ _?._ };
[ #[#; <== INIT ]
#[.=;i;1]
];
[ #[>=n;5;##[i];[true];] ]; #[#; <== CONDITION ]
[ #[#; <== BODY ]
##[i]##[chr;10]
#[.=;i;#[fmtd;%0.0f;#[+;##[i];1]]]
];
[ #[#; <== CLEAN ]
]
]
]
ПРАВИ ЗА ВСЕКИ - поне веднъж:#[=;{ _.?_ };[
{INIT}
#[{ .? };[{BODY}];[{CONDITION}]]
{CLEAN}
]
]
#[=.;{ _.?_ };{INIT};{BODY};{CONDITION};{CLEAN}]
ПРАВИ ЗА ВСЕКИ - поне веднъж:##[cout;
#[{ _.?_ };
[ #[#; <== INIT ]
#[ base ;docbases/zzzbase]
#[ open the base for reading ]
];
[ #[#; <== BODY ]
#[ get ]##[chr;10]
];
[ #[ next? ] ]; #[#; <== CONDITION ]
[ #[#; <== CLEAN ]
#[ close the base ]
]
]
]
6.2 Команди за управление на базите
Команди за архивиране и разархивиране на база или части от нея.
6.2.1 Запис на множество към текст (UTF-8)
#[=;ZZZ2TXTRecursionForEach;[
##[fmtl;[%016I64X];{LEVEL}],
##[=;ELEMENT;##[~~^.;{BASE};{PID}]]
##[fmtl;[%016I64X];##[(..);ELEMENT]],
#[repeatPrint;##[chr;32];{LEVEL}]
##[ELEMENT]
#[=x;ELEMENT]
##[chr;10]
#[==;true;##[~~>v;{BASE};{PID}];[
#[ZZZ2TXTRecursion;{BASE};{PID};#[fmtd;%0.0f;##[+;1;{LEVEL}]]]
#[==;true;##[~~>^;{BASE};{PID}];;]
];
]
#[==;true;##[~~>+.;{BASE};{PID}];[
#[ZZZ2TXTRecursionForEach;{BASE};{PID};{LEVEL}]
];
]
]
]
#[=.;ZZZ2TXTRecursionForEach;{BASE};{PID};{LEVEL}]
#[=;ZZZ2TXTRecursion;[
#[==;true;##[~~>(.;{BASE};{PID}];[
#[ZZZ2TXTRecursionForEach;{BASE};{PID};{LEVEL}]
];
]
]
]
#[=.;ZZZ2TXTRecursion;{BASE};{PID};{LEVEL}]
#[=;ZZZ2TXT;[
#[==;true;##[~~>v;{BASE};{PID}];[
#[ZZZ2TXTRecursion;{BASE};{PID};0]
#[==;true;##[~~>^;{BASE};{PID}];;]
];
]
]
]
#[=.;ZZZ2TXT;{BASE};{PID}]
##[cout;
#[.=;_base_;docbases/zzzbase]
#[~~+;##[_base_]]
#[.=;_^_;#[~~^;##[_base_]]]
#[ZZZ2TXT;##[_base_];##[_^_]]
#[~~.;##[_base_];##[_^_]]
#[~~-;##[_base_]]
]
#[=;ZZZ2TXTFromPath;[
#[~~+;{BASE}]
#[=;pIdR_ZZZ2TXTFromPath;##[~~^;{BASE}]]
#[==;true;##[~~>...;{BASE};##[pIdR_ZZZ2TXTFromPath];{PATH};true];[
#[ZZZ2TXT;{BASE};##[pIdR_ZZZ2TXTFromPath]]
];
]
##[~~.;{BASE};##[pIdR_ZZZ2TXTFromPath]]
#[~~-;{BASE}]
]
]
#[=.;ZZZ2TXTFromPath;{BASE};{PATH}]
##[cout;
#[ZZZ2TXTFromPath;docbases/zzzbase;]
]
Формата на един ред от текстовия резултат е следния:
[ниво на вложеност (64 битово шестнадесетично число)][,][дължина на елемента(64 битово шестнадесетично число)][,][подравняващи символи с брой равен на нивото на вложеност][елемент]
Пример:
0000000000000000,000000000000000F,Интернет адреси
0000000000000000 - главно ниво;
000000000000000F - дължината на елемента е 15 символа;
Няма подравняващи символи, защото нивото на вложеност е нула;
Интернет адреси - самият елемент.
#[=;ZZZ2TXTFromDividerPath;[
#[ZZZ2TXTFromPath;{BASE};##[~~///...;[{PATH}];[{DIV}]]]
]
]
#[=.;ZZZ2TXTFromDividerPath;{BASE};{PATH};{DIV}]
##[cout;
#[ZZZ2TXTFromDividerPath;docbases/zzzbase;;/]
]
Формата на един ред от текстовия резултат е следния:
[ниво на вложеност (64 битово шестнадесетично число)][,][дължина на елемента(64 битово шестнадесетично число)][,][подравняващи символи с брой равен на нивото на вложеност][елемент]
Пример:
0000000000000000,000000000000000F,Интернет адреси
0000000000000000 - главно ниво;
000000000000000F - дължината на елемента е 15 символа;
Няма подравняващи символи, защото нивото на вложеност е нула;
Интернет адреси - самият елемент.
6.2.2 Четене на множество от текст (UTF-8)
#[=;skipSpace;[
#[>=; ;##[^.;{FORM};<error>];[
#[skipSpace;{FORM}]
];[
#[*v;{FORM};#[-;#[*^;{FORM}];1]]
]
]
]
]
#[=.;skipSpace;{FORM}]
#[=;moveToRelativeLevel;[
#[==;0;{LEVEL};;[
#[>=n;{LEVEL};1;[
#[==;true;#[~~>v;{BASE};{PID}];;]
#[moveToRelativeLevel;{BASE};{PID};#[fmtd;[%0.0f];#[-;{LEVEL};1]]]
];[
#[==;true;#[~~>^;{BASE};{PID}];;]
#[moveToRelativeLevel;{BASE};{PID};#[fmtd;[%0.0f];#[+;{LEVEL};1]]]
]
]
]
]
]
]
#[=.;moveToRelativeLevel;{BASE};{PID};{LEVEL}]
#[#;[
НИВО ,ДЪЛЖИНА ,[брой подравняващи символи равен на нивото]ЕЛЕМЕНТ
0000000000000000,000000000000000F,Интернет адреси
#]]
#[=;TXT2ZZZRecursion;[
#[skipSpace;TXT2ZZZ_TXT]
#[=;LEVEL;#[refmtl;%I64X;%I64d;#[^..;TXT2ZZZ_TXT;16;<error>]]]
#[*v;TXT2ZZZ_TXT;#[+;1;#[*^;TXT2ZZZ_TXT]]]
#[=;LENGTH;#[refmtl;%I64X;%I64d;#[^..;TXT2ZZZ_TXT;16;<error>]]]
#[*v;TXT2ZZZ_TXT;#[+;1;#[*^;TXT2ZZZ_TXT]]]
#[*v;TXT2ZZZ_TXT;#[+;##[LEVEL];#[*^;TXT2ZZZ_TXT]]]
#[=;ELEMENT;##[^..;TXT2ZZZ_TXT;##[LENGTH];]]
#[==;;##[ELEMENT];;[
#[moveToRelativeLevel;{BASE};{PID};#[fmtd;[%0.0f];#[-;##[LEVEL];{LEVEL}]\
]]
#[==;true;#[~~+.;{BASE};{PID};##[ELEMENT]];[
#[=;{RESULT};true]
];
]
#[TXT2ZZZRecursion;{BASE};{PID};##[LEVEL];{RESULT}]
]
]
]
]
#[=.;TXT2ZZZRecursion;{BASE};{PID};{LEVEL};{RESULT}]
#[=;TXT2ZZZ;[
#[=;TXT2ZZZ_TXT;[{TXT}]]
#[==;true;##[~~>v;{BASE};{PID}];[
#[TXT2ZZZRecursion;{BASE};{PID};0;{RESULT}]
#[==;true;##[~~>^;{BASE};{PID}];;]
];
]
##[{RESULT}]
#[=x;TXT2ZZZ_TXT]
]
]
#[=.;TXT2ZZZ;{BASE};{PID};{TXT};{RESULT}]
##[cout;
#[.=;_base_;docbases/zzzbase]
#[.=;TXT2ZZZ_RESULT;false]
#[~~+;##[_base_]]
#[.=;_v_;#[~~v;##[_base_];10000]]
#[==;true;#[~~>^;##[_base_];##[_v_]];;]
#[TXT2ZZZ;##[_base_];##[_v_];[
0000000000000000,000000000000000F,Интернет адреси
0000000000000000,0000000000000011,Интернет адреси 1
];TXT2ZZZ_RESULT]
#[~~.;##[_base_];##[_v_]]
#[~~-;##[_base_]]
]
Формата на един ред от текстовия резултат е следния:
[ниво на вложеност (64 битово шестнадесетично число)][,][дължина на елемента(64 битово шестнадесетично число)][,][подравняващи символи с брой равен на нивото на вложеност][елемент]
Пример:
0000000000000000,000000000000000F,Интернет адреси
0000000000000000 - главно ниво;
000000000000000F - дължината на елемента е 15 символа;
Няма подравняващи символи, защото нивото на вложеност е нула;
Интернет адреси - самият елемент.
#[=;TXT2ZZZToPath;[
#[=;TXT2ZZZ_RESULT;false]
#[~~+;{BASE}]
#[=;pIdW_TXT2ZZZToPath;##[~~v;{BASE};100000]]
#[==;true;##[~~+...;{BASE};##[pIdW_TXT2ZZZToPath];{PATH};true];[
#[TXT2ZZZ;{BASE};##[pIdW_TXT2ZZZToPath];[{TXT}];TXT2ZZZ_RESULT]
];
]
#[==;true;##[TXT2ZZZ_RESULT];[
##[~~.;{BASE};##[pIdW_TXT2ZZZToPath]]
];[
##[~~vx;{BASE}]
]
]
#[~~-;{BASE}]
#[=x;TXT2ZZZ_RESULT]
]
]
#[=.;TXT2ZZZToPath;{BASE};{PATH};{TXT}]
##[cout;
#[TXT2ZZZToPath;docbases/zzzbase;;[
0000000000000000,000000000000000F,Интернет адреси
0000000000000000,0000000000000011,Интернет адреси 1
]]
]
Формата на един ред от текстовия резултат е следния:
[ниво на вложеност (64 битово шестнадесетично число)][,][дължина на елемента(64 битово шестнадесетично число)][,][подравняващи символи с брой равен на нивото на вложеност][елемент]
Пример:
0000000000000000,000000000000000F,Интернет адреси
0000000000000000 - главно ниво;
000000000000000F - дължината на елемента е 15 символа;
Няма подравняващи символи, защото нивото на вложеност е нула;
Интернет адреси - самият елемент.
#[=;TXT2ZZZToDividerPath;[
#[TXT2ZZZToPath;{BASE};##[~~///...;[{PATH}];[{DIV}]];[{TXT}]]
]
]
#[=.;TXT2ZZZToDividerPath;{BASE};{PATH};{DIV};{TXT}]
##[cout;
#[TXT2ZZZToDividerPath;docbases/zzzbase;;/;[
0000000000000000,000000000000000F,Интернет адреси
0000000000000000,0000000000000011,Интернет адреси 1
]]
]
Формата на един ред от текстовия резултат е следния:
[ниво на вложеност (64 битово шестнадесетично число)][,][дължина на елемента(64 битово шестнадесетично число)][,][подравняващи символи с брой равен на нивото на вложеност][елемент]
Пример:
0000000000000000,000000000000000F,Интернет адреси
0000000000000000 - главно ниво;
000000000000000F - дължината на елемента е 15 символа;
Няма подравняващи символи, защото нивото на вложеност е нула;
Интернет адреси - самият елемент.