Last active
August 29, 2015 14:22
-
-
Save evgenylavelin-xx/6eae838144501242dbcc to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| &НаСервере | |
| // Определяет, является ли символ разделителем. | |
| // | |
| // Параметры: | |
| // КодСимвола - Число - код проверяемого символа; | |
| // РазделителиСлов - Строка - символы разделителей. | |
| // | |
| // Возвращаемое значение: | |
| // Булево - истина, если символ является разделителем. | |
| // | |
| Функция ЭтоРазделительСлов(КодСимвола, РазделителиСлов = Неопределено) Экспорт | |
| Если РазделителиСлов <> Неопределено Тогда | |
| Возврат Найти(РазделителиСлов, Символ(КодСимвола)) > 0; | |
| КонецЕсли; | |
| Диапазоны = Новый Массив; | |
| Диапазоны.Добавить(Новый Структура("Мин,Макс", 48, 57)); // цифры | |
| Диапазоны.Добавить(Новый Структура("Мин,Макс", 65, 90)); // латиница большие | |
| Диапазоны.Добавить(Новый Структура("Мин,Макс", 97, 122)); // латиница маленькие | |
| Диапазоны.Добавить(Новый Структура("Мин,Макс", 1040, 1103)); // кириллица | |
| Диапазоны.Добавить(Новый Структура("Мин,Макс", 1025, 1025)); // символ "Ё" | |
| Диапазоны.Добавить(Новый Структура("Мин,Макс", 1105, 1105)); // символ "ё" | |
| Диапазоны.Добавить(Новый Структура("Мин,Макс", 95, 95)); // символ "_" | |
| Для Каждого Диапазон Из Диапазоны Цикл | |
| Если КодСимвола >= Диапазон.Мин И КодСимвола <= Диапазон.Макс Тогда | |
| Возврат Ложь; | |
| КонецЕсли; | |
| КонецЦикла; | |
| Возврат Истина; | |
| КонецФункции | |
| &НаСервере | |
| // Разбивает строку на несколько строк, используя заданный набор разделителей. | |
| // Если параметр РазделителиСлов не задан, то разделителем слов считается любой из символов, | |
| // не относящихся к символам латиницы, кириллицы, цифры, подчеркивания. | |
| // | |
| // Параметры: | |
| // Строка - Строка - строка, которую необходимо разложить на слова. | |
| // РазделителиСлов - Строка - строка, содержащая символы-разделители. | |
| // | |
| // Возвращаемое значение: | |
| // массив значений, элементы которого - отдельные слова. | |
| // | |
| // Пример: | |
| // РазложитьСтрокуВМассивСлов("один-@#два2_!три") возвратит массив значений: "один", "два2_", "три"; | |
| // РазложитьСтрокуВМассивСлов("один-@#два2_!три", "#@!_") возвратит массив значений: "один-", "два2", "три". | |
| // | |
| Функция РазложитьСтрокуВМассивСлов(Знач Строка, РазделителиСлов = Неопределено) Экспорт | |
| Слова = Новый Массив; | |
| РазмерТекста = СтрДлина(Строка); | |
| НачалоСлова = 1; | |
| Для Позиция = 1 По РазмерТекста Цикл | |
| КодСимвола = КодСимвола(Строка, Позиция); | |
| Если ЭтоРазделительСлов(КодСимвола, РазделителиСлов) Тогда | |
| Если Позиция <> НачалоСлова Тогда | |
| Слова.Добавить(Сред(Строка, НачалоСлова, Позиция - НачалоСлова)); | |
| КонецЕсли; | |
| НачалоСлова = Позиция + 1; | |
| КонецЕсли; | |
| КонецЦикла; | |
| Если Позиция <> НачалоСлова Тогда | |
| Слова.Добавить(Сред(Строка, НачалоСлова, Позиция - НачалоСлова)); | |
| КонецЕсли; | |
| Возврат Слова; | |
| КонецФункции | |
| &НаСервере | |
| /// Объединяет строки из массива в строку с разделителями. | |
| // | |
| // Параметры: | |
| // Массив - Массив - массив строк которые необходимо объединить в одну строку; | |
| // Разделитель - Строка - любой набор символов, который будет использован в качестве разделителя. | |
| // | |
| // Возвращаемое значение: | |
| // Строка - строка с разделителями. | |
| // | |
| Функция СтрокаИзМассиваПодстрок(Массив, Разделитель = ",", СокращатьНепечатаемыеСимволы = Ложь) Экспорт | |
| Результат = ""; | |
| Для Индекс = 0 По Массив.ВГраница() Цикл | |
| Подстрока = Массив[Индекс]; | |
| Если СокращатьНепечатаемыеСимволы Тогда | |
| Подстрока = СокрЛП(Подстрока); | |
| КонецЕсли; | |
| Если ТипЗнч(Подстрока) <> Тип("Строка") Тогда | |
| Подстрока = Строка(Подстрока); | |
| КонецЕсли; | |
| Если Индекс > 0 Тогда | |
| Результат = Результат + Разделитель; | |
| КонецЕсли; | |
| Результат = Результат + Подстрока; | |
| КонецЦикла; | |
| Возврат Результат; | |
| КонецФункции | |
| &НаСервере | |
| // Разделяет текст на слова по указанным разделителям. По умолчанию разделители - пробельные символы. | |
| // | |
| // Параметры: | |
| // Текст - Строка - Разделяемая строка. | |
| // Разделители - Строка - Необязательная строка символов-разделителей. | |
| // | |
| // Возвращаемое значение: | |
| // Массив - строки, слова | |
| // | |
| Функция СловаТекста(Знач Текст, Знач Разделители = Неопределено) Экспорт | |
| НачалоСлова = 0; | |
| Состояние = 0; | |
| Результат = Новый Массив; | |
| Для Позиция = 1 По СтрДлина(Текст) Цикл | |
| ТекущийСимвол = Сред(Текст, Позиция, 1); | |
| ЭтоРазделитель = ?(Разделители = Неопределено, ПустаяСтрока(ТекущийСимвол), Найти(Разделители, ТекущийСимвол) > 0); | |
| Если Состояние = 0 И (Не ЭтоРазделитель) Тогда | |
| НачалоСлова = Позиция; | |
| Состояние = 1; | |
| ИначеЕсли Состояние = 1 И ЭтоРазделитель Тогда | |
| Результат.Добавить(Сред(Текст, НачалоСлова, Позиция-НачалоСлова)); | |
| Состояние = 0; | |
| КонецЕсли; | |
| КонецЦикла; | |
| Если Состояние = 1 Тогда | |
| Результат.Добавить(Сред(Текст, НачалоСлова, Позиция-НачалоСлова)); | |
| КонецЕсли; | |
| Возврат Результат; | |
| КонецФункции | |
| &НаСервере | |
| Функция СократитьНеЦифры(Текст, ДопустимоКромеЦифр = "", Направление = Истина) | |
| Длина = СтрДлина(Текст); | |
| Если Направление Тогда | |
| // Сокращение слева | |
| Индекс = 1; | |
| Конец = 1 + Длина; | |
| Шаг = 1; | |
| Иначе | |
| // Сокращение справа | |
| Индекс = Длина; | |
| Конец = 0; | |
| Шаг = -1; | |
| КонецЕсли; | |
| Пока Индекс <> Конец Цикл | |
| Символ = Сред(Текст, Индекс, 1); | |
| ЭтоЦифра = (Символ >= "0" И Символ <= "9") Или Найти(ДопустимоКромеЦифр, Символ) = 0; | |
| Если ЭтоЦифра Тогда | |
| Прервать; | |
| КонецЕсли; | |
| Индекс = Индекс + Шаг; | |
| КонецЦикла; | |
| Если Направление Тогда | |
| // Сокращение слева | |
| Возврат Прав(Текст, Длина - Индекс + 1); | |
| КонецЕсли; | |
| // Сокращение справа | |
| Возврат Лев(Текст, Индекс); | |
| КонецФункции |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment