Bio do usuário
404 bio não encontrada
Membro desde Mar. 17, 2022
Postagens:
Respostas:
Muito legal Marcio.
Parabéns a todos que participaram deste concurso. Os artigos publicados foram todos excelentes. E parabéns a InterSystems por organizar o concurso, que estimula a criação de material pela comunidade, compartilhando assim informação. Obrigado pela premiação.
Certificações e credenciais da Credly:
Emblemas Global Masters:
Julio ainda não tem emblemas no Global Masters.
Seguidores:
Seguindo:
Olá Jenifer,
Montei o código a seguir para verificar a existência de globais em uma rotina.
A principio ele avalia uma rotina .MAC que fica com seu código na global ^rMAC mas você pode adapta-lo para verificar qualquer uma, inclusive métodos de classes ou qualquer outra estrutura com algum ajuste.
Set debug=1
Write !,"Rotina: " Read nome
If nome="" Quit
Kill ^dicionario(nome)
If '$Data(^rMAC(nome)) Write !,"Rotina não existe" Quit
Set nlin=+$Get(^rMAC(nome,0,0)) If nlin<1 Write !,"Não existem linhas na rotina" Quit
Set clin=0
Do
{
Set clin=clin+1
If clin'>nlin
{
Set txt=^rMAC(nome,0,clin)
Set tam=$Length(txt)
Set pos=0
Set esc=0
Do
{
Set pos=pos+1
If pos'>tam
{
Set car=$Extract(txt,pos)
If car=""""
{
Set esc=$Select(esc=1:0,1:1)
If debug
{
If esc=0 Write !,">>>Fecha aspa"
Else Write !,"<<<Abre aspa"
} } Else {
If 'esc
{
If car="^"
{
If debug Write " <- Achou circunflexo: Vem uma global: "
Set gpos=pos
For Set gpos=gpos+1,cpos=$Extract(txt,gpos) If cpos'?1A&(cpos'?1N) Quit
Set global=$Extract(txt,pos,gpos-1)
If debug Write global
Set ^dicionario(nome,global)=$Piece($Get(^dicionario(nome,global)),"|",1)+1_"|"_$Piece($Get(^dicionario(nome,global)),"|",2,9999)_"|"_clin_","_pos
}
} Else {
If debug
{
Write !," >>>Texto dentro de aspa: ",car
}
}
}
}
} While (pos<tam) }
} While (clin<nlin)
Quit
Fiz um teste básico aqui e funcionou em teste para algumas rotinas minhas.
A global criada ^dicionario, vai trazer a global na chave e como conteúdo o número de vezes que aparece no código seguido das posições onde aparece (linha e posição).
A variavel debug ativa/desativa um debug para ver o que está ocorrendo no código.
O código somente vai avaliar a rotina corrente. Se ele fizer chamadas a métodos ou outros códigos que manipulem globais ele não pegará.
Espero que ajude.