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 символа; Няма подравняващи символи, защото нивото на вложеност е нула; Интернет адреси - самият елемент.