1С СтрЧислоВхождений – количество вхождений подстроки

Функция 1С СтрЧислоВхождений(ГдеИщем, ЧтоИщем) возвращает цифру – сколько количество раз встретилась строка ЧтоИщем в строке ГдеИщем.


Например:

  • Выполняем 1С СтрЧислоВхождений(«50$ это всегда лучше, чем 10$», «$»)
  • 1С возвращает 2
  • Выполняем 1С СтрЧислоВхождений(«Ежик любит посмеяться, Ежик любит попрыгать, Ежиковидный смех», «Ежик»)
  • 1С возвращает 3

Если Вам требуется определить наличие в строке символа или части строки – лучше использовать функцию 1С Найти(), так как она ищет первое вхождение, а не все, и поэтому работает быстрее.

Если же Вам требуется проверить шаблон, то лучше использовать 1С СтрЧислоВхождений(). Например проверка на наличие в адресе электронной почты ровно одного символа @, или в телефонном номере 2х символов «-».

На примере нашего анализатора текста сделаем с помощью 1С СтрЧислоВхождений – проверка корректности формата CSV.

В формате CSV можно сохранить документ Excel. Он представляет из себя текстовый файл, где каждое значение колонки в строке таблицы отделено от следующей знаком разделителя, обычно «;».Там, где значение пустое (пропущено), там просто ставится разделитель «;».

Например, Excel:

Данный файл Excel в формате CSV (Файл/Сохранить как/формат CSV) выглядит следующим образом:

Если значение пропущено – то разделитель в любом случае присутствует, поэтому в каждой строке CSV должно быть N разделителей.

[VIP_CONTENT]

//Проверяет корректность файла CSV, сравнивая кол-во колонок в строках файла с первой
Функция ПроверкаФайлаCSV(ИмяФайла)
     
     Попытка
          //"открываем" файл на чтение
          //если файл невозможно открыть - будет "исключение"
          Файл = Новый ЧтениеТекста(ИмяФайла);
     Исключение
          //здесь мы, если файл не удалось открыть
          Сообщить("Ошибка: файл '" + ИмяФайла + "' не найден или невозможно открыть(" + ОписаниеОшибки() + ")");
          Возврат Ложь;
     КонецПопытки;
     
     Текст = Файл.Прочитать(); //считываем весь файл целиком (все строчки)
     Файл.Закрыть(); //"закрываем" файл, чтобы системные ресурсы не были заняты
     
     Результат = Истина; //результат проверки по умолчанию, если в ходе проверки что-то не так - "сбросим" его в ложь
     ЗаданноеКолвоКолонок = Неопределено; //эталонное значение колонок, будет известно нам только в первой строке
     КолвоСтрок = СтрЧислоСтрок(Текст); //сохраним кол-во строк, так как оно не изменяется в ходе работы с файлом, чтобы не вычислять его много раз
     
     //цикл по кол-ву строк
     Для Сч = 1 по КолвоСтрок Цикл
          Строка = СтрПолучитьСтроку(Текст, Сч); //получаем из текста со множеством строк одну строку по ее номеру (счетчик в цикле)
          ЧислоВхождений = СтрЧислоВхождений(Строка, ";") + 1; //сколько колонок в полученной строке - вычисляем с помощью кол-ва разделителей (кол-во колонок = кол-во разделителей + 1)
          
          Если ЗаданноеКолвоКолонок = Неопределено Тогда //первая строка файла
               ЗаданноеКолвоКолонок = ЧислоВхождений; //запомним эталон
               
          ИначеЕсли ЧислоВхождений <> ЗаданноеКолвоКолонок Тогда //иначе сравниваем с эталонным значением
               //если не совпало
               Сообщить("Ошибка: в строке " + Строка(Сч) + " неверное число колонок(должно быть " + Строка(ЗаданноеКолвоКолонок) + ", по факту " + Строка(ЧислоВхождений) + ")");
               //сбрасываем флаг
               Результат = Ложь;
          КонецЕсли;
     КонецЦикла;
     
     //если флаг проверки остался положительным, то сообщим, что все ок
     Если Результат Тогда
          Сообщить("Файл корректный");
     КонецЕсли;
     
     Возврат Результат;
     
КонецФункции

[/VIP_CONTENT]