Гость
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / контекстный поиск в коде программ / 5 сообщений из 5, страница 1 из 1
01.12.2014, 16:06
    #38821525
DirksDR
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
контекстный поиск в коде программ
Есть ли такое в студии, или в загашнике у кого?
Не хочется изобретать велосипед, но хочется задать программе строку (имя переменной или глобали) и получить список
программ, в которых это имя встречается.
Как писал кто-то в этом форуме - "здоровое желание халявы":)
...
Рейтинг: 0 / 0
01.12.2014, 16:27
    #38821553
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
контекстный поиск в коде программ
DirksDRНе хочется изобретать велосипед, но хочется задать программе строку (имя переменной или глобали) и получить список
программ, в которых это имя встречается.
Вот параметодов, коими мы пользуемся...
Тебе нужно сунуть их в класс... Пробежаться по программкам, вызывая метод find() и анализируя возвращаемые значения...
/// <h3>Поиск подстроки в программе</h3>
/// <p>
/// Вернет строку типа "строка,колонка[,длина]" или пустую строку если вхождение не найдено.
/// Где <b>длина</b> это количество символов строки, которая соответствовала регулярному 
/// выражению
/// </p>
/// <table>
/// <tr>
/// <td><b>String</b></td>
/// <td><i>Искомая строка</i></td>
/// </tr>
/// <tr>
/// <td><b>Name</b></td>
/// <td><i>Имя программы</i></td>
/// </tr>
/// <tr>
/// <td><b>Case</b></td>
/// <td><i>Без учета регистра</i></td>
/// </tr>
/// <tr>
/// <td><b>Type</b></td>
/// <td><i>Искать как регулярное выражение - 1. Функцией $find() - 0</i></td>
/// </tr>
/// <tr>
/// <td><b>Ns</b></td>
/// <td><i>Имя области</i></td>
/// </tr>
/// <tr>
/// <td><b>Row</b></td>
/// <td><i>Начальная строка</i></td>
/// </tr>
/// <tr>
/// <td><b>Col</b></td>
/// <td><i>Начальная колонка</i></td>
/// </tr>
/// </table>
/// <p>Примеры поиска:</p>
/// 
/// <EXAMPLE>
/// // 1. Ищем вхождение строки "D OPENUSE^ASYS3" в программе A.int
/// w ##class(air.cEdit).find("D OPENUSE^ASYS3","A.int")
/// // Вернет строку "18,2"
/// // 2. Ищем цифровую последовательность в программе A.int, начиная со второй строки
/// w ##class(air.cEdit).find("\d+","A.int",,1,,2)
/// // Вернет строку "5,26,2"
/// </EXAMPLE>
/// 
ClassMethod find(String As %String, Name As %String, Case As %Boolean = 0, Type As %Boolean = 0, Ns As %String = "", Row As %Integer = 0, Col As %Integer = 0) As %String
{
  i Ns'="",'##class(%SYS.Namespace).Exists(Ns) q ""
  s ns=$znspace
  zn:Ns'="" Ns
  s val=""
  if ##class(%Routine).Exists(Name) {
    s o=##class(%Routine).%New(Name)
    s text=o.Read()
    k o
    s val=..search(String,text,Case,Type,Row,Col)
  }
  zn ns
  q val
}

/// <h3>Поиск подстроки в тексте</h3>
/// <p>
/// Вернет строку типа "строка,колонка[,длина]" или пустую строку если вхождение не найдено.
/// Где <b>длина</b> это количество символов строки, которая соответствовала регулярному 
/// выражению
/// </p>
/// <table>
/// <tr>
/// <td><b>String</b></td>
/// <td><i>Искомая строка</i></td>
/// </tr>
/// <tr>
/// <td><b>Text</b></td>
/// <td><i>Текст</i></td>
/// </tr>
/// <tr>
/// <td><b>Case</b></td>
/// <td><i>Без учета регистра</i></td>
/// </tr>
/// <tr>
/// <td><b>Type</b></td>
/// <td><i>Искать как регулярное выражение - 1. Функцией $find() - 0</i></td>
/// </tr>
/// <tr>
/// <td><b>Row</b></td>
/// <td><i>Начальная строка</i></td>
/// </tr>
/// <tr>
/// <td><b>Col</b></td>
/// <td><i>Начальная колонка</i></td>
/// </tr>
/// </table>
/// <p>Примеры поиска:</p>
/// 
/// <EXAMPLE>
/// // 1. Ищем вхождение строки "D OPENUSE^ASYS3" в тексте
/// w ##class(air.cEdit).search("D OPENUSE^ASYS3","Пример текста D OPENUSE^ASYS3")
/// // Вернет строку "1,15"
/// // 2. Ищем цифровую последовательность в тексте, начиная со второй строки
/// w ##class(air.cEdit).search("\d+","Пример текста "_$c(10)_"Пример текста 2",,1,2)
/// // Вернет строку "2,15,1"
/// </EXAMPLE>
/// 
ClassMethod search(String As %String, Text As %String, Case As %Boolean = 0, Type As %Boolean = 0, Row As %Integer = 0, Col As %Integer = 0) As %String
{
  if Case {
    s:Type String="(?i)"_String
    s:'Type Text=$system.SQL.UPPER(Text),String=$system.SQL.UPPER(String)
  }
  s beg=$l($p(Text,$c(10),1,Row-1))+Col
  try {
    s beg=$s(Type:$locate(Text,String,beg+1,,val),1:$f(Text,String,beg))
  } catch {
    s beg=0
  }
  q:'beg ""
  s pos=$s(Type:beg,1:beg-$l(String))
  s txt=$e(Text,1,pos)
  s Row=$l(txt,$c(10))
  s Col=$l($p(txt,$c(10),Row))
  q Row_","_Col_$s(Type:","_$l(val),1:"")
}
...
Рейтинг: 0 / 0
01.12.2014, 16:33
    #38821563
servit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
контекстный поиск в коде программ
DirksDR ,

15031660
...
Рейтинг: 0 / 0
01.12.2014, 18:12
    #38821758
doublefint
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
контекстный поиск в коде программ
DirksDR, Ctrl+Shift+F
...
Рейтинг: 0 / 0
02.12.2014, 11:16
    #38822300
DirksDR
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
контекстный поиск в коде программ
doublefint, servit, krvsa

Спасибо, сам бы я не нашел.
Не ожидал, что надо искать в files, ведь программы хранятся в базе...
Хорошо, что такая полезная фишка встроена в Студию.
Код тоже пригодится
...
Рейтинг: 0 / 0
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / контекстный поиск в коде программ / 5 сообщений из 5, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]