Имя: Пароль:
1C
1С v8
Поиск Слова целиком в строке
0 antiteror91
 
25.12.13
14:20
Скажите пожалуйста есть ли функция которая может найти слово целиком в строке?
1 Wobland
 
25.12.13
14:21
да
2 antiteror91
 
25.12.13
14:21
(1) какая??
3 The_SpecialOne
 
25.12.13
14:22
Найти
4 antiteror91
 
25.12.13
14:22
(0) глобальная замена не устраивает.
5 1Сергей
 
25.12.13
14:22
Найти(Где, " "+Слово+" ")
6 Wobland
 
25.12.13
14:23
(3) а как с пробелами быть?
(2) вроде матч(). у регекспа
7 Fragster
 
гуру
25.12.13
14:24
автор, наверное, имеет ввиду, чтобы при поиске "долбил" не находилось "продолбил". тут надо либо проверять символы до/после, либо воспользоваться регулярным выражением "\bдолбил\b"

http://infostart.ru/public/75941/
8 Wobland
 
25.12.13
14:24
"а лампочку в подъезде кто выкрутил?Пушкин Александр Сергеевич?"
9 antiteror91
 
25.12.13
14:24
(3) найти ищет подсроку а мне нужно слово целиком "фотограф сделал фото" если я буду искаить с помощью найти то мне покажет слово "фотограф"
10 Fragster
 
гуру
25.12.13
14:24
(5) "дятел долбил, а потом устал"
11 WildSery
 
25.12.13
14:24
(5) Найти(" " + Где + " ", " " + Слово + " ")
12 Fragster
 
гуру
25.12.13
14:24
или просто "долбил"
13 1Сергей
 
25.12.13
14:26
(11) знаки препинания надо убрать. (10)+1
14 Fragster
 
гуру
25.12.13
14:28
(13) не только. если просто с пробелами искать - то еще и табуляции убрать, а также добавить пробелы в начале и конце.

проще (7)
15 antiteror91
 
25.12.13
14:28
(11) на примере строки "фотограф сделал фото, круто!" покажите пожалуйста а то я не очень понимаю пока...
16 antiteror91
 
25.12.13
14:31
(11) просто за словом могут быть различные знаки припенания точка, запятая, скобка. не прописывать же это для каждого знака припинания.
17 bolobol
 
25.12.13
14:32
Чушь! Пропускаем буквы, остальное меняем на пробелы, окружаем строку пробелами. Нужное нам слово окружено пробелами. Хитрость +3!
18 1Сергей
 
25.12.13
14:33
(17) ага, при поиске мильон строк так обработать
19 bolobol
 
25.12.13
14:34
Засадим строку, окружённую пробелами, в запрос. В запросе укажем искать НЕ буква + Слово + НЕ буква. Интеллект +5!
20 1Сергей
 
25.12.13
14:35
(19) если у тебя запрос будет 15 минут выполняться, то у тебя будет: Зубы -1!
21 antiteror91
 
25.12.13
14:37
нужен механизм как в глобальной замене... но я его хочу в обработку включить....
22 bolobol
 
25.12.13
14:38
(18) Во первых, задачи бывают разные. И быстрое программирование в 90% случаев закрывает задачу _быстро_! А вам Навыки -2 кто-то колданул. У каждой отдельной задачи есть эффективное решение, эффективно - выбрать буквы, а не заменять все прочие символы.
23 1Сергей
 
25.12.13
14:40
(22) угу, угу. +5 к быдлокодингу
24 bolobol
 
25.12.13
14:40
(20) Если запрос выполнился результативно, то Зубы +5 будут!(премия позволит) Для этого и есть тестирование. Вот когда с тестированием не алё, то будет -1 штатный сотрудник))
25 Fragster
 
гуру
25.12.13
14:48
(19) а если надо число вхождений? или замену?
26 antiteror91
 
25.12.13
14:52
(25) да с числом вхождений тоже проблема... потому что найти ищет позицию первого вхождения....
27 bolobol
 
25.12.13
14:57
(25) (26) Число вхождений - отрезаем то, что нашли, ищем снова - строка уже подготовлена.
28 Fragster
 
гуру
25.12.13
14:59
(27) ты же запросом нашел факт вхождения, а не позицию. а с Найти - там нету [не буква]
29 bolobol
 
25.12.13
15:02
(28) Предлагаете решить запросом число вхождений? (это даже интересно, с условием без запроса в цикле)
А по заменам, обработка 10 000 строк по алгоритму замен не букв, на толстом клиенте на ай3 длится менее минуты. Длины наименований <= 40.
30 Fragster
 
гуру
25.12.13
15:03
(29) дык еще список "не букв" нужно правильный составить. + вернуть в нормальное состояние строку (если мы говорим о создании СтрЗаменить)
31 bolobol
 
25.12.13
15:05
(30) Нет! Без СтрЗаменить, хотя, с её применением, возможно, можно бОльшую скорость получить. А /не буква/ заменяется как именно... Оппа, вспомнил про код символа...
32 bolobol
 
25.12.13
15:06
(30) Да, и возвращать строку к нормальному виду не требуется, т.к. мы создаём поисковый аналог.
33 Fragster
 
гуру
25.12.13
15:08
(31) использование КодСимвола для определения "буква это, или нет" - это жуткий говнокод.
34 bolobol
 
25.12.13
15:08
В любом случае, должен помочь полнотекстовый поиск, разве нет?
35 bolobol
 
25.12.13
15:09
(33) Да ну! Вы программисту С++ расскажите об этом))))
36 antiteror91
 
25.12.13
15:11
(33) у меня была идея проверять последующий символ через код символа но использовать поиск знака припинания а не буквы.
37 Fragster
 
гуру
25.12.13
15:14
(35) кодовые страницы - вещь коварная + в юникоде множество алфавитов, некоторые даже с разрывами идут.
38 bolobol
 
25.12.13
15:16
(37) Кодовые страницы стандартизированы. И, ежели стандарт поменяется, это как... не знаю... с Виндовса на Линухе байт код запустить и удивляться.
39 dj_serega
 
25.12.13
15:19
Кто поможет ТС +10 к карме.
40 Fragster
 
гуру
25.12.13
15:23
(39)->(7)
41 Fragster
 
гуру
25.12.13
15:24
(38) я к тому, что для каких-то простейших случаев типа ASCII знаков препинания или там английского алфавита - сработает. Даже для русского сработает , только Ё отдельно, ЕМНИП, лежит. А вот запятых всяких и прочих непотребностей, немецких/испанских умляутов и прочей гадости - вообще навалом.
42 bolobol
 
25.12.13
15:29
(41) Ну как тут... Слово на любом языке найти, не дав программе алфавит - задача не реализуемая, т.к. любая буква, не используемая в поисковом слове, будет опознаваться как знак.
43 Fragster
 
гуру
25.12.13
15:35
(42) ну хотя бы заменив КодСимвола на массив допустимых символов или массив знаков препинания - меньше говнокода (да, работает подольше). но тут уже возникает вопрос в поддержании актуальности этих массивов.
44 Fragster
 
гуру
25.12.13
15:35
для данной конкретной задачи я за (7), равно как и за число вхождений и за замену
45 bolobol
 
25.12.13
15:51
Там, в (7), только реклама с комментариями. В чём там решение?, не понял.

А регэкспы в самой операционной системе есть, вызывается как СОМ объект, только как-то не уверен, что быстрее будет, чем внутри 1С.

А вот с точки зрения программирования, предлагаемый в (43) метод - это намеренное понижение производительности, дабы не выражаться.
Методы необходимо использовать заложенные в систему, а уж личное мнение, каким будет такой код, если система гомно - это личное мнение.
46 Fragster
 
гуру
25.12.13
15:57
(45) искомое регулярное выражение дано.
47 bolobol
 
25.12.13
16:00
А вот если анализируется текст кода, то к буквам ещё и символы и знак подчёркивания в алфавит добавляются.
Как способ проверить на вход в алфавит, с наглядностью самого алфавита, это Найти("алфавит", Сред(СтрокаПоиска, ПозицияПроверяемогоСимвола, 1)

(46) А куда вставлять данное регулярное выражение?
48 Fragster
 
гуру
25.12.13
16:07
(47) если в (7), то в поле ввода Паттерн, если автор смог набрать в гугле 1с регулярные выражения - то скорее свего в поле Pattern объекта VBScript.RegExp, хотя тут возможны варианты
49 Fragster
 
гуру
25.12.13
16:08
кстати, надо бы на управляемых формах запилить :)
50 bolobol
 
25.12.13
16:12
(48) А, так вот этот вариант с ВБСкрипт - насколько производительным будет, относительно внутренностей 1С?
51 Fragster
 
гуру
25.12.13
16:15
(50) для выражения из (7) для предложенной задачи - будет быстрее скорее всего. Из-за необходимости кроме собственно поиска обрабатывать строку в 1с, что 1с умеет весьма плохо
52 bolobol
 
25.12.13
16:25
Вот не поспорю никак - не умею код для вызова на раз написать. А так бы проветрил на своей базе номенклатур...
53 Kvestin
 
25.12.13
16:59
Надо конечно сравнивать скорость через регулярки и код 1С.
Я предполагаю, что Найти в 1С реализовано не "в лоб", поэтому использовать его можно.
Т.е по циклу:
- ищем первое вхождение через Найти(СтрокаПоиска, ИскомоеСлово)
- проверяем символ до и после слова на [буква]/[пробельный символ] (естественно учитываем границы строки, или добавляем пробел до и после исходной строки и не пишем условия на границу)
- вырезаем слово и ищем дальше
54 Fragster
 
гуру
25.12.13
18:23
ну и да, к вопросу о регулярках: http://regex.alf.nu/

пока 2614
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший