Имя: Пароль:
1C
1С v8
Перебор вхождений подстроки в строку
0 fierylions
 
27.03.13
14:30
Добрый день коллеги.

Такой вопрос:

Если мы используем метод Найти(НашаСтрока,"Что ищем");
то нам возвратится номер найденной строки.
Допустим мы ищем слово "Слон". По факту предположим таких слов у нас в строке встречается 3 раза.

Так вот как перебрать эти найденные строки без обрезания строки?

Когда большие строки на несколько тысяч символов и с разными шумами и признаками которые то добавляются то убираются крайне не удобно искать методом нарезки.

Знаю что например в делфи метод найти обходит найденные слова циклом.

Может можно как то создать ком объект туда засунуть нашу строку и что мы ищем? Кто то делал ?
Хотелось бы что бы это было без использования компонент. Думаю встроенных ком объектов кучу в 1С.

У кого то может есть рабочий пример?
1 Wobland
 
27.03.13
14:34
всё не читал. регвыражения подойдут?
2 mikecool
 
27.03.13
14:34
Встроенные функции языка.СтрЧислоВхождений (Script functions.StrOccurrenceCount)
Встроенные функции языка (Script functions)
СтрЧислоВхождений (StrOccurrenceCount)
Синтаксис:

СтрЧислоВхождений(<Строка>, <ПодстрокаПоиска>)
Параметры:

<Строка> (обязательный)

Тип: Строка.
Исходная строка.
<ПодстрокаПоиска> (обязательный)

Тип: Строка.
Искомая подстрока.
Возвращаемое значение:

Тип: Число.
Число вхождений.
Описание:

Вычисляет число вхождений подстроки поиска в исходной строке.

Доступность:

Тонкий клиент, веб-клиент, сервер, толстый клиент, внешнее соединение.
Пример:

Результат = СтрЧислоВхождений(ИсходныйТекст, "Число");
Сообщить("Слово ""Число"" встречается " + Результат + " раз.");
3 fierylions
 
27.03.13
14:45
нашлось решение всем спасибо:

Процедура КнопкаВыполнитьНажатие(Кнопка)
   
   RegExp = Новый COMОбъект("VBScript.RegExp"); // Объект для использования регулярных выражений
   RegExp.IgnoreCase = Истина; //Игнорировать регистр
   RegExp.Global = Истина; //Поиск всех вхождений шаблона
   
   RegExp.MultiLine = Истина; //Многострочный
   
   RegExp.Pattern = "слон";
   Matches= RegExp.Execute("1слон 2слон 3слон");
   ОчиститьСообщения();
   Для Сч = 0 по Matches.Count()-1 Цикл
       Match = Matches.Item(Сч);
       Сообщить("" + Match.Value+ "");        
   КонецЦикла;    
   
   
КонецПроцедуры