//===============================================================================
// РАБОТА СО СТРОКАМИ (СТР) И МНОГОСТРОЧНЫМИ СТРОКАМИ (МСТР)
//===============================================================================
Функция __естьПрефикс( строкаИсточник, Префикс) Экспорт
Если __пустаяСтрока(Префикс) или __пустаяСтрока(строкаИсточник) или СтрДлина(Префикс) > СтрДлина(строкаИсточник) Тогда Возврат ложь; КонецЕсли;
длинаСтр = СтрДлина(Префикс);
Возврат Лев(строкаИсточник, длинаСтр)=Префикс;
КонецФункции
Функция __естьПостфикс( строкаИсточник, Постфикс ) Экспорт
Если __пустаяСтрока(Постфикс) или __пустаяСтрока(строкаИсточник) или СтрДлина(Постфикс) > СтрДлина(строкаИсточник) Тогда Возврат ложь; КонецЕсли;
длинаСтр = СтрДлина(Постфикс);
Возврат Прав(строкаИсточник, длинаСтр)=Постфикс;
КонецФункции
Функция __получитьПодстроку(строкаИсточник, индексНачала, длинаПодстроки) Экспорт
Возврат Сред( строкаИсточник, индексНачала, длинаПодстроки);
КонецФункции
Функция __удалитьПодстроку(строкаИсточник, подстрока) Экспорт
строкаИсточник = СтрЗаменить( строкаИсточник, подстрока, "");
КонецФункции
Функция __удалитьПодстрокуПоИндексу(строкаИсточник, индексНачала, длинаПодстроки) Экспорт
строка11=""; строка21=""; строка12=""; строка22="";
__разделитьСтрокуПоИндексу(строкаИсточник, индексНачала, строка11, строка21);
__разделитьСтрокуПоИндексу(строкаИсточник, индексНачала + длинаПодстроки, строка12, строка22);
строкаИсточник = строка11 + строка22;
КонецФункции
Функция __вставитьПодстроку(строкаИсточник, подстрока, индескНачала) Экспорт
строка1=""; строка2="";
Если Неопределено =__разделитьСтрокуПоИндексу(строкаИсточник, индескНачала, строка1, строка2) Тогда Возврат Неопределено; КонецЕсли;
строкаИсточник = строка1 + подстрока + строка2;
Возврат Истина;
КонецФункции
//возврат: две части, строки
Функция __разделитьСтрокуПоИндексу( строкаИсточник, индескНачалаРазделения, строка1, строка2 ) Экспорт
Если индескНачалаРазделения > СтрДлина(строкаИсточник) Тогда Возврат Неопределено; КонецЕсли;
строка1 = Лев(строкаИсточник, индескНачалаРазделения);
строка2 = Прав(строкаИсточник, СтрДлина(строкаИсточник) - индескНачалаРазделения +1 );
Возврат Истина;
КонецФункции
//возврат: две части, строки
Функция __разделитьСтрокуПоПодстроке( строкаИсточник, ПодстрокаРазделения, строка1, строка2 ) Экспорт
Если СтрДлина(ПодстрокаРазделения) > СтрДлина(строкаИсточник) или СтрДлина(ПодстрокаРазделения) = (СтрДлина(строкаИсточник)+1) Тогда Возврат Неопределено; КонецЕсли;
индекс = __получитьИндексСтрокиПоСимволу(строкаИсточник, ПодстрокаРазделения);
строка1 = Лев(строкаИсточник, индекс);
строка2 = Прав(строкаИсточник, СтрДлина(строкаИсточник) - индекс - СтрДлина(ПодстрокаРазделения) +1 );
Возврат Истина;
КонецФункции
//возврат: при исключении возврат Неопределено
Функция __получитьСимволСтрокиПоИндексу( строкаИсточник, индекс) Экспорт
Возврат ?(индекс>СтрДлина(строкаИсточник), Неопределено, Сред(строкаИсточник, индекс, 1));
КонецФункции
//возврат: при исключении возврат Неопределено
Функция __получитьИндексСтрокиПоСимволу( строкаИсточник, символ) Экспорт
индекс = Найти(строкаИсточник, символ);
Возврат ?(индекс=0, Неопределено, индекс);
КонецФункции
//возврат: при исключении возврат Неопределено, иначе подстрока
Функция __получитьПодстрокуПоСимволуИсключению(строкаИсточник, индексНачалаСканирования, символИсключения) Экспорт
Если (индексНачалаСканирования+СтрДлина(символИсключения)) > СтрДлина(строкаИсточник) Тогда Возврат Неопределено; КонецЕсли;
строка = Прав(строкаИсточник, СтрДлина(строкаИсточник) - индексНачалаСканирования +1);
подстрока ="";
Если СтрДлина(символИсключения) > 1 Тогда
следСтрока = __получитьПодстроку(строка, 1, СтрДлина(символИсключения));
Пока не __пустаяСтрока(следСтрока) Цикл
Если следСтрока<>символИсключения Тогда подстрока = подстрока + следСтрока; Иначе Прервать; КонецЕсли;
__удалитьПодстрокуПоИндексу(строка, 1, СтрДлина(следСтрока) );
следСтрока = __получитьПодстроку(строка, 1, СтрДлина(символИсключения));
КонецЦикла;
//
Иначе
Для н=1 По СтрДлина(строка) Цикл
символ = __получитьСимволСтрокиПоИндексу(строка, н);
Если символ<>символИсключения Тогда подстрока = подстрока + символ; Иначе Прервать; КонецЕсли;
КонецЦикла;
КонецЕсли;
Возврат подстрока;
КонецФункции
//возврат: при исключении возврат Неопределено
Функция __удалитьСимволСтрокиПоИндексу( строкаИсточник, индекс) Экспорт
длинаСтр = СтрДлина(строкаИсточник);
Если индекс>длинаСтр Тогда Возврат Неопределено; КонецЕсли;
левСтр = Лев(строкаИсточник, индекс -1 );
правСтр = Прав(строкаИсточник, длинаСтр - индекс);
стр = левСтр + правСтр;
Возврат стр;
КонецФункции
//возврат: многострочная строка
//
Функция __получитьМСтроку( строкаИсточник, строкаРазделитель, строкаИсключения=Неопределено, ПовторятьСтрокуРазделителя=Ложь ) Экспорт
стр = СтрЗаменить( строкаИсточник, строкаРазделитель, Символы.ПС);
резСтр = "";
Если Неопределено=строкаИсключения Тогда Возврат стр; КонецЕсли;
//исключение заданной строки из многострочной строки
колво = СтрЧислоСтрок(стр);
Для н=1 По колво Цикл
текСтр = СтрПолучитьСтроку(стр, н);
Если не ПовторятьСтрокуРазделителя и текСтр<>строкаИсключения Тогда __сформироватьПодстрокуМСтроки(резСтр, текСтр);
Если не __пустаяСтрока(текСтр) или текСтр<>строкаИсключения Тогда __сформироватьПодстрокуМСтроки(резСтр, текСтр); КонецЕсли;
КонецЕсли;
КонецЦикла;
Возврат резСтр;
КонецФункции
//раскладывает на подстроки
//возврат: массив подстрок
Функция __получитьСтрокуВМассив(строкаИсточник, строкаРазделитель, строкаИсключения=Неопределено, ПовторятьСтрокуРазделителя=Ложь) Экспорт
массив = Новый Массив;
стр = строкаИсточник;
ДлинаРазделителя = СтрДлина(строкаРазделитель);
Пока истина Цикл
Поз = Найти(Стр, строкаРазделитель);
Если Поз=0 Тогда
текСтр = Стр;
//
Если не ПовторятьСтрокуРазделителя и текСтр<>строкаИсключения Тогда массив.Добавить( текСтр );
Иначе
Если не __пустаяСтрока(текСтр) или текСтр<>строкаИсключения Тогда массив.Добавить( текСтр ); КонецЕсли;
КонецЕсли;
//
Возврат массив;
КонецЕсли;
текСтр = Лев(Стр, Поз-1);
//
Если не ПовторятьСтрокуРазделителя и текСтр<>строкаИсключения Тогда массив.Добавить( текСтр );
Иначе
Если не __пустаяСтрока(текСтр) или текСтр<>строкаИсключения Тогда массив.Добавить( текСтр ); КонецЕсли;
КонецЕсли;
//
Стр = Сред( Стр, Поз+ДлинаРазделителя );
КонецЦикла;
Возврат массив;
КонецФункции
Функция __этоМСтрока(строкаИсточник) Экспорт
Возврат ( Найти(строкаИсточник, Символы.ПС)<>0 );
КонецФункции
Функция __получитьМСтрокуВМассив(строкаИсточник, строкаИсключения=Неопределено)Экспорт
массив = Новый Массив;
колво = СтрЧислоСтрок(строкаИсточник);
Для н=1 По колво Цикл
текСтр = СтрПолучитьСтроку(строкаИсточник, н);
Если строкаИсключения<>Неопределено и текСтр<>строкаИсключения Тогда массив.Добавить( текСтр ); КонецЕсли;
КонецЦикла;
Возврат массив;
КонецФункции
Функция __получитьМСтрокуИзМассива(массивИсточник, строкаИсключения=Неопределено)Экспорт
стр = "";
Для каждого элемент Из массивИсточник Цикл
Если __этоСтрока(элемент) и строкаИсключения<>Неопределено и элемент<>строкаИсключения Тогда __сформироватьПодстрокуМСтроки(стр, элемент); КонецЕсли;
КонецЦикла;
Возврат стр;
КонецФункции
Функция __получитьСтрокуИзМассива(массивИсточник, строкаРазделитель="", строкаИсключения=Неопределено) Экспорт
стр = "";
былоВхождение = Ложь;
Для каждого элемент Из массивИсточник Цикл
Если __этоСтрока(элемент) и строкаИсключения<>Неопределено и элемент<>строкаИсключения Тогда стр = стр + элемент + строкаРазделитель; былоВхождение=Истина; КонецЕсли;
КонецЦикла;
Если былоВхождение Тогда __удалитьПодстрокуПоИндексу(стр, СтрДлина(стр)-СтрДлина(строкаРазделитель), СтрДлина(строкаРазделитель) ); КонецЕсли; //убираем лишний разделитель
Возврат стр;
КонецФункции
Процедура __сформироватьПодстрокуМСтроки( строкаИсточник, подСтрока )Экспорт
строкаИсточник = строкаИсточник + подСтрока + Символы.ПС;
КонецПроцедуры
Мои функции для работы со строками
22.01.09
Разработка - Универсальные функции
Здесь представлены мои функции для работы со строками в 1С.
Скачать файл
ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.