сокращение записи диапазонов упр.символов

This commit is contained in:
Dmitry Belyaev 2022-05-05 17:40:19 +03:00
parent 0f9427abe8
commit ce57f18588
Signed by: b4tman
GPG Key ID: 41A00BF15EA7E5F3
1 changed files with 31 additions and 13 deletions

View File

@ -494,23 +494,41 @@
КонецЦикла;
КонецПроцедуры
Функция МассивПоДиапазонуЧисел(Число_С, Числоо)
Результат = Новый Массив;
Для ТекЧисло = Число_С По Числоо Цикл
Результат.Добавить(ТекЧисло);
КонецЦикла;
Возврат Результат;
КонецФункции
Функция СформироватьДиапазон(МассивОписанияДиапазона)
Результат = Неопределено;
Если 1 = МассивОписанияДиапазона.Количество() Тогда
Результат = Новый Массив;
Результат.Добавить(МассивОписанияДиапазона[0]);
ИначеЕсли 2 = МассивОписанияДиапазона.Количество() Тогда
Результат = МассивПоДиапазонуЧисел(МассивОписанияДиапазона[0], МассивОписанияДиапазона[1]);
Иначе
ВызватьИсключение СтрШаблон("Ошибка в описании диапазона: %1 элементов", МассивОписанияДиапазона.Количество());
КонецЕсли;
Возврат Результат;
КонецФункции
Процедура ИсправитьНедопустимыеСимволы(ТабДок)
// список символов из:
// https://ru.wikipedia.org/wiki/%D0%A3%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D1%8F%D1%8E%D1%89%D0%B8%D0%B5_%D1%81%D0%B8%D0%BC%D0%B2%D0%BE%D0%BB%D1%8B
УпрСимволы_ASCII = "0,1,2,3,4,5,6,7,8,9,0B,0C,0E,0F,10,11,12,13,14,15,16,17,18,19,1A,1B,1C,1D,1E,1F,7F";
УпрСимволы_ISO = "80,81,82,83,84,85,86,87,88,89,8A,8B,8С,8D,8E,8F,90,91,92,93,94,95,96,97,98,99,9A,9B,9C,9D,9E,9F";
УпрСимволы_Unicode = "034F,2008,200B,200C,200D,200E,200F,2028,2029,202A,202B,202C,202D,202E,2060,2061,2063,2066,2067,2068,2069,206A,206B,206C,206D,206E,206F," +
"FE00,FE01,FE02,FE03,FE04,FE05,FE06,FE07,FE08,FE09,FE0A,FE0B,FE0C,FE0D,FE0E,FE0F,FEFF,FFF9,FFFA,FFFB,FFFC,FFFD";
УпрСимволы = СтрШаблон("%1,%2,%3", УпрСимволы_ASCII, УпрСимволы_ISO, УпрСимволы_Unicode);
УпрСимволы = СтрРазделить(УпрСимволы, ",");
УпрСимволы = Мап("Результат = Ох(Элемент)", УпрСимволы);
УпрСимволы = Мап("Результат = Символ(Элемент)", УпрСимволы);
ИнтервалыКодов = "0-1F,7F,80-9F,034F,2008,200B-200F,2028-202E,2060-2061,2063,2066-206F,"
+ "FE00-FE0F,FEFF,FFF9-FFFD,E0100-E01EF";
ИнтервалыКодов = СтрРазделить(ИнтервалыКодов, ",");
ИнтервалыКодов = Мап("Результат = СтрРазделить(Элемент, ""-"")", ИнтервалыКодов);
ИнтервалыКодов = Мап("Результат = Мап(""Результат = Ох(Элемент)"" ,Элемент)", ИнтервалыКодов);
ИнтервалыКодов = Мап("Результат = СформироватьДиапазон(Элемент)", ИнтервалыКодов);
УпрСимволы = Свернуть("ОбщегоНазначенияКлиентСервер.ДополнитьМассив(Результат, Элемент)", ИнтервалыКодов, Новый Массив);
УпрСимволы = Мап("Результат = Символ(Элемент)", УпрСимволы);
УпрСимволы = ОбщегоНазначенияКлиентСервер.СвернутьМассив(УпрСимволы);
Для ТекСимвол_Число = Ох("E0100") По Ох("E01EF") Цикл
УпрСимволы.Добавить(Символ(ТекСимвол_Число));
КонецЦикла;
Исключения = Мап("Результат = Символы[Элемент]", СтрРазделить("ПС,ВК", ","));
УпрСимволы = Фильтр("Условие = Неопределено = _.Найти(Элемент)", УпрСимволы, Исключения);
ЗаменитьТекстВТД(ТабДок, Символы.ВТаб, Символы.ПС);