:: Visual Foxpro, Foxpro for DOS
Code References - регулярные выражения
Каратаев
Автор

Сообщений: 3974
Откуда: Алматы
Дата регистрации: 04.12.2001
Добрый день... Что-то уже целый час сижу туплю...
Задача такая - в программе есть вызов некоей функции с необязательными параметрами. Выглядит примерно так (привожу несколько вариантов):
=l_sele('cenapos','cenapos','cenaposk')
l_sele('kurscen')
=l_sele("summag","summag","summagk",,"EXCLUSIVE")
=l_sele('NASNSF','NASNSF','','F')
l_sele('istads','','','S')
=l_sele('DVSKL','DVSKL','DVSKLDN','S')
Мне нужно в проекте найти все вызовы l_sele, где 4-й параметр = "S", для чего пытаюсь использовать регулярные выражения. Перепробовал кучу вариантов, но либо находит все вызовы функции, независимо от параметров, либо ничего не находит... Ну вот например, нижеприведённая регулярка находит всё без учёта параметра...
l_sele*,?[S]*
Вот мои потуги:[attachment 35223 2021-04-05_135227.png]
И это не полный список... В Solutions примеры смотрел, на форуме темы искал...
Дайте кто-нибудь пинка в нужную сторону...


------------------
Никогда не бывает настолько плохо, чтобы не могло быть еще хуже.
Ratings: 0 negative/0 positive
Re: Code References - регулярные выражения
leonid

Сообщений: 3202
Откуда: Рига
Дата регистрации: 03.02.2006
Попробуйте
l_sele\(.+['"]S['"]\s*\)



Исправлено 1 раз(а). Последнее : leonid, 05.04.21 11:28
Ratings: 0 negative/1 positive
Re: Code References - регулярные выражения
Каратаев
Автор

Сообщений: 3974
Откуда: Алматы
Дата регистрации: 04.12.2001
Спасибо! Сработало! То, что нужно!


------------------
Никогда не бывает настолько плохо, чтобы не могло быть еще хуже.
Ratings: 0 negative/0 positive
Re: Code References - регулярные выражения
akvvohinc

Сообщений: 4201
Откуда: Москва
Дата регистрации: 11.11.2008
Каратаев
Мне нужно в проекте найти все вызовы l_sele, где 4-й параметр = "S"
...
Спасибо! Сработало! То, что нужно!
Что, находит "S" именно в 4-м параметре?

А вообще поиск по регуляркам не всегда работает правильно - точнее, в результате показываются не те строки, в которых найдено искомое.

Попробуйте на большом проекте поискать, например, что-нибудь такое (или подобное):
\(ALLTRIM
Во всех ли строчках в колонке Code есть текст "(ALLTRIM" ?
У меня - далеко не во всех, в том числе могут быть показаны и пустые строки, если у вас они есть в коде.
Но если посмотреть код, то где-то рядом с показанной строкой искомое найдется.

PS
Можно даже искать что-то, не включающее спец.символы, например, просто "ALLTRIM", но с установленным флажком 'Use regular expressions'



Исправлено 2 раз(а). Последнее : akvvohinc, 05.04.21 18:33
Ratings: 0 negative/0 positive
Re: Code References - регулярные выражения
Каратаев
Автор

Сообщений: 3974
Откуда: Алматы
Дата регистрации: 04.12.2001
akvvohinc
Что, находит "S" именно в 4-м параметре? А вообще поиск по регуляркам не всегда работает правильно - точнее, в результате показываются не те строки, в которых найдено искомое.
Попробуйте на большом проекте поискать, например, что-нибудь такое (или подобное):
\(ALLTRIM
Во всех ли строчках в колонке Code есть текст "(ALLTRIM" ?
Да, в моём случае нашлось именно то, что и требовалось: "S" именно в 4-м параметре. Не буду утверждать, что найдено 100% таких вызовов, но очень похоже, что это так. Более точно уже будет видно в ходе дальнейшей работы.
По поводу того, что не всегда правильно срабатывает, так это скорее вина неправильно составленного регулярного выражения, чем его работа. Иногда мы не понимаем (я не понимаю) как правильно и когда нужно задавать те или иные параметры. Хотя с регулярными выражениями сталкивался, правда не применительно к FoxPro, в NotePad++ делал глобальные замены в текстовых файлах именно с помощью регулярных выражений. Даже статью об этом на блоге написал obg.kz.
А что не так с ALLTRIM? Вот часть моего результата по такому запросу:
[attachment 35229 alltrim.png] Вроде нормально всё...


------------------
Никогда не бывает настолько плохо, чтобы не могло быть еще хуже.




Исправлено 1 раз(а). Последнее : Каратаев, 06.04.21 06:23
Ratings: 0 negative/0 positive
Re: Code References - регулярные выражения
akvvohinc

Сообщений: 4201
Откуда: Москва
Дата регистрации: 11.11.2008
Каратаев
Да, в моём случае нашлось именно то, что и требовалось: "S" именно в 4-м параметре.
Я имел в виду, что эта строка могла найтись не только в 4-м параметре, а в любом месте строки, соответствующем регулярке.

Цитата:
вот часть моего результата по такому запросу:
Вроде нормально всё...
Часть и у меня нормально.
Но если посмотреть все результаты вывода (у меня это до сотни страниц), то обнаруживаются и строки, в которых ALLTRIM нет, например:
i1.imageban.ru

Причем, если убрать флаг 'Use regular expressions', то такого не происходит.
А в вашем примере этот флаг стоял?



Исправлено 1 раз(а). Последнее : akvvohinc, 06.04.21 16:47
Ratings: 0 negative/0 positive
Re: Code References - регулярные выражения
Каратаев
Автор

Сообщений: 3974
Откуда: Алматы
Дата регистрации: 04.12.2001
akvvohinc
Я имел в виду, что эта строка могла найтись не только в 4-м параметре, а в любом месте строки, соответствующем регулярке.
В принципе - да, но для моей конкретной задачи - нет. А мне важно было решить именно её.
По поводу ALLTRIM... Странно, специально пролистал все результаты до самого конца и всё правильно в выдаче. Кстати, тоже вроде проект не маленький... Но спорить не буду, Вы же показали свои результаты - там видно, что не всё гладко.
akvvohinc
А в вашем примере этот флаг стоял?
Конечно стоял!


------------------
Никогда не бывает настолько плохо, чтобы не могло быть еще хуже.
Ratings: 0 negative/0 positive
Re: Code References - регулярные выражения
akvvohinc

Сообщений: 4201
Откуда: Москва
Дата регистрации: 11.11.2008
Цитата:
Но спорить не буду, Вы же показали свои результаты - там видно, что не всё гладко.
Похоже, разобрался, в чем причина:
Я для корректировки PRG обычно пользуюсь внешним редактором, в котором есть возможность писать свои функции на C (расширять возможности редактора).
И оказалось, что одна такая функция, рисующая "красивые заголовки" подпрограмм (название в рамочке) ставила разделителем строк код 13, а не 13+10.

Похоже, это и сбивало счетчик строк, а в результате выводилась не та строка, в которой было найдено выражение.

И нигде это себя до сих пор не проявляло, кроме как при поиске с использованием RegExp.



Исправлено 1 раз(а). Последнее : akvvohinc, 06.04.21 21:24
Ratings: 0 negative/0 positive
Re: Code References - регулярные выражения
Каратаев
Автор

Сообщений: 3974
Откуда: Алматы
Дата регистрации: 04.12.2001



------------------
Никогда не бывает настолько плохо, чтобы не могло быть еще хуже.
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 8 (Гостей: 8)

© 2000-2024 Fox Club 
Яндекс.Метрика