Имя: Пароль:
1C
 
Как найти в строке несколько ключевых слов (поиск по подстроке).
0 sysadminlk
 
21.10.10
19:45
Как найти в строке несколько ключевых слов (поиск по подстроке).

   Док = СоздатьОбъект("Документ.Расходная");
   Док.ВыбратьДокументы();
   Пока Док.ПолучитьДокумент() = 1 Цикл
       Если Док.Проведен() = 1 Тогда
           Док.ВыбратьСтроки();
           Пока Док.ПолучитьСтроку() = 1 Цикл
               Если Найти(СокрЛП(Врег(Док.Товар)),СокрЛП(Врег(ПодСтр))) > 0 Тогда
                   Сообщить(""+Док+" колво "+Док.Количество+"");
               КонецЕсли;
           КонецЦикла;
       КонецЕсли;
   КонецЦикла;

Где в ПодСтр значения указанные через пробел.
ПодСтр = "мышь Genius ps/2".

Получается если я использую Найти(,) мне нужно как-то разбить строку ПодСтр в данном случае на три строки мышь Genius ps/2.

У кого какие варианты?
1 andrewalexk
 
21.10.10
19:46
:) "регулярные выражения" заяндекси
2 azernot
 
21.10.10
19:49
3 aka AMIGO
 
21.10.10
19:49
СЗ = глРазложить(Подстр," ");
и ищи последовательно вхождения из СЗ

я так вывернулся
4 YauheniL
 
21.10.10
19:55
(0) Для чего ищешь?
5 sysadminlk
 
21.10.10
19:56
(3) а можно полный вариант процедуры глРазложить
6 sysadminlk
 
21.10.10
19:57
(4) нужно строках найти эти слова если есть то показать что эти слова встречаются в таких-то расходках
7 aka AMIGO
 
21.10.10
20:00
(5) угу..
вот вариант поиска по нескольким значениям строки
http://zalil.ru/29848764

и текст:

//***************************************************
//    глРазложить(Стр,Разделитель)
//
//    Параметры:
//        Стр -            строка, которую необходимо разложить на подстроки.
//                        Параметр передается по значению.
//        Разделитель -    строка-разделитель, по умолчанию - запятая.
//
//
//    Возвращаемое значение:
//        список значений, элементы которого - подстроки
//
//    Описание:
//        Функция "расщепляет" строку на подстроки, используя заданный
//        разделитель. Разделитель может иметь любую длину.
//        Если в качестве разделителя задан пробел, рядом стоящие пробелы
//        считаются одним разделителем, а ведущие и хвостовые пробелы параметра Стр
//        игнорируются.
//        Например,
//        глРазложить(",ку,,,му", ",") возвратит список значений из пяти элементов,
//        три из которых - пустые строки, а
//        глРазложить(" ку   му", " ") возвратит список значений из двух элементов
//        
Функция глРазложить(Знач Стр, Разделитель = ",") Экспорт
   СЗ = СоздатьОбъект("СписокЗначений");
   Если Разделитель = " " Тогда
       Стр = СокрЛП(Стр);
       Пока 1=1 Цикл
           Поз = Найти(Стр,Разделитель);
           Если Поз=0 Тогда
               СЗ.ДобавитьЗначение(Стр);
               Возврат СЗ;
           КонецЕсли;
           СЗ.ДобавитьЗначение(Лев(Стр,Поз-1));
           Стр = СокрЛ(Сред(Стр,Поз));
       КонецЦикла;
   Иначе
       ДлинаРазделителя = СтрДлина(Разделитель);
       Пока 1=1 Цикл
           Поз = Найти(Стр,Разделитель);
           Если Поз=0 Тогда
               СЗ.ДобавитьЗначение(Стр);
               Возврат СЗ;
           КонецЕсли;
           СЗ.ДобавитьЗначение(Лев(Стр,Поз-1));
           Стр = Сред(Стр,Поз+ДлинаРазделителя);
       КонецЦикла;
   КонецЕсли;
КонецФункции // глРазложить
8 Guk
 
21.10.10
20:00
запросом уже давно бы сделал...
9 YauheniL
 
21.10.10
20:01
(6) В одной расходке одна строка, которую надо разложить?
10 aka AMIGO
 
21.10.10
20:01
(8) а поговорить?.. :)
11 Guk
 
21.10.10
20:03
LIKE рулит...
12 sysadminlk
 
21.10.10
20:04
(11) как его туда подключить )
13 sysadminlk
 
21.10.10
20:05
согласен LIKE тема ))))
14 sysadminlk
 
21.10.10
20:36
(7) Огромное спасибо очень помогло.
15 andrewks
 
21.10.10
21:10
(7) не перестаю удивляться, как программеры из 1с не умеют использовать функционал своего же интерпретатора. вот так повкуснее:

Функция глРазложить(Знач Стр,Разделитель=",")
   СЗ=СоздатьОбъект("СписокЗначений");
   Стр=""""+СтрЗаменить(СокрЛП(Стр),Разделитель,""",""")+"""";
   СЗ.ИзСтрокиСРазделителями(Стр);
   Возврат СЗ;
КонецФункции