1С 8.3 Проверка строки на валидность (по скобкам) - Программист 1С Минск. Автоматизация бизнеса.

Перейти к контенту

1С 8.3 Проверка строки на валидность (по скобкам)

Данные > Примеры кода 1С > 1С 8.3 Строка, текст, буквы
CopyPaste с телеграм-канала
Вариант 1: Проверка строки на валибность "()","{}", "[]" в 1С 8.3:
&НаСервере
Функция ПроверитьСтрокуНаВалидностьПоСкобкам1(ПроверяемаяСтрока)

 // Проверим, вдруг строка пустая
 Если ПустаяСтрока(ПроверяемаяСтрока) Тогда
   Возврат Истина;
 КонецЕсли;

 // Зададим массив, куда будем добавлять скобки последовательно
 Скобки = Новый Массив;

 // Обойдем все
 Для ТекСимвол = 1 По СтрДлина(ПроверяемаяСтрока) Цикл

   // Получим текущий элемент, сохранив в переменную
   ТекЭлемент = Сред(ПроверяемаяСтрока,ТекСимвол,1);

   Если ТекЭлемент = "(" Тогда
     // Добавлять будем последний элемент, чтобы сравнивать сразу с ним
     Скобки.Добавить(")");
   ИначеЕсли ТекЭлемент = "[" Тогда
     Скобки.Добавить("]");
   ИначеЕсли ТекЭлемент = "{" Тогда
     Скобки.Добавить("}");
   ИначеЕсли Скобки.Количество() = 0 Тогда
     // Проверив, что текущий элемент у нас не открывающаяся скобка, и стек скобок пустой, возвращаем значение Ложь
     Возврат Ложь;
   Иначе

     // Получаем индекс последней скобки
     ПоследнийИндекс = Скобки.Количество() - 1;

     Если Скобки[ПоследнийИндекс] = ТекЭлемент Тогда
       // Если последний элемент равен нашей закрывающийся скобки, то мы удаляем этот элемент из стека скобок,
       // так как пара скобок у нас сошлась и закрылась
       Скобки.Удалить(ПоследнийИндекс);
     Иначе
       Возврат Ложь;
     КонецЕсли;
   КонецЕсли;
 КонецЦикла;

 // Проверим, остались ли незакрытые скобки в стеке
 Если Скобки.Количество() <> 0 Тогда
   Возврат Ложь;
 КонецЕсли;

 Возврат Истина;

КонецФункции
Вариант 2: Проверка строки на валибность "()","{}", "[]" в 1С 8.3:
Функция ПроверитьСкобкиВСтроке(Строка)

 Скобки = Новый Соответствие;

 Для Каждого ТекСимвол Из СтрРазделить("[,],(,),{,}", ",", Ложь) Цикл
   Скобки.Вставить(ТекСимвол, 0);
 КонецЦикла;

 // Обойдем все
 Для ТекСимвол = 1 По СтрДлина(Строка) Цикл
   ТекСимвол = Сред(Строка, ТекСимвол, 1);
   КолТекСимв = Скобки.Получить(ТекСимвол);
   Если КолТекСимв <> Неопределено Тогда
     Скобки.Вставить(ТекСимвол, КолТекСимв + 1);
   КонецЕсли;
 КонецЦикла;

 Возврат (Скобки.Получить("[") = Скобки.Получить("]")) И
   (Скобки.Получить("(") = Скобки.Получить(")")) И
   (Скобки.Получить("{") = Скобки.Получить("}"));

КонецФункции
0
комментарии
____________________
Copyright©, «Программист 1С в г.Минске», 11.12.2023
Перепечатка текста и фотографий разрешена при наличии прямой ссылки на источник
Назад к содержимому