Показали оригинальное решение задачи, в которой надо оставить в строке только определенные символы. Набор символов может быть различным.
Например надо чтобы в строке остались только латинские буквы и цифры:
Функция КорректныйНабор()
мСимволы = "abcdefghijklmnopqrstuvwxyz";
Возврат "0123456789" + мСимволы + ВРег(мСимволы);
КонецФункции
Процедура ПривестиТекст(мТекст)
мТекст = СтрСоединить(СтрРазделить(мТекст, СтрСоединить(СтрРазделить(мТекст, КорректныйНабор()))));
КонецПроцедуры
Смысл в следующем:
В методе СтрРазделить в качестве второго параметра может быть использован набор символов, каждый из которых может быть разделителем.
Сначала разделяем исходную строку по корректным символам. СтрРазделить(мТекст, КорректныйНабор()). На выходе получим массив символов, которые не включены в корректный набор.
Далее объединяем полученный набор обратно в строку: СтрСоединить(СтрРазделить(мТекст, КорректныйНабор())). На выходе получим только некорректные символы в строке.
Потом исходную строку разделяем используя в качестве разделителя строку некорректных символов. На выходе получаем массив корректных символов.
Далее объединяем массив корректных символов в строку.
Метод работает быстро. Сравнивал его и перебор строки по символам с проверкой на корректность. Метод отработал на 0.0004 сек. быстрее. Тестировал на строке длинной 3000 символов.
|