Expressão Regular no SET FILTER

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

Avatar do usuário
clodoaldomonteiro
Usuário Nível 4
Usuário Nível 4
Mensagens: 821
Registrado em: 30 Dez 2006 13:17
Localização: Teresina-PI
Contato:

Expressão Regular no SET FILTER

Mensagem por clodoaldomonteiro »

Olá amigos,

Tem como usar Expressão Regular no SET FILTER:

Tenho uma demanda em que devo imprimir alguns determinados registro, onde cada um gera um formulário em PDF.
O Operador vai informar quais códigos do documento devem ser listados, tipo:
Códigos: [00001-00010, 00025, 00040-00045].
No exemplo acima, deve ser filtrado os registros com código de 00001 ao 00010, e o registro de código 00025, e os registros de códigos 00040 ao 00045.
Seria a mesma coisa que fazemos quando vamos imprimir um DOC Word, que podemos escolher uma variedade de páginas.

Desde já agradeço a atenção
At. Clodoaldo Monteiro
Linguagens: Clipper / Harbour
Área de Atuação: Sistemas de gestão para Prefeituras Municipais
Fones: (86)3223-0653, 98859-0236
www.simplesinformatica.com.br
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Expressão Regular no SET FILTER

Mensagem por JoséQuintas »

Se não for de um jeito, vai de outro.

Sempre tem a opção SET FILTER TO MinhaFuncao()

Mas o ideal seria criar um set filter que não dependa de variável externa, pra não ter erro.

Código: Selecionar todos

cFilter := [codigoitem $ "123,456,789"]
SET FILTER TO &cFilter
De repente, uma função que converte a seleção.

cFilter := Converte( cSelecao )
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Expressão Regular no SET FILTER

Mensagem por Itamar M. Lins Jr. »

Ola!
Estando indexado pelo código, não use SET FILTER. OrdScope é mais rápido.
Basta criar uma função para ir pegando os pedaços de dentro "0010-0015,00X1-00X5,..." separado por virgulas e se tiver "-" será inicio "-" e o fim do ordscope.

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
clodoaldomonteiro
Usuário Nível 4
Usuário Nível 4
Mensagens: 821
Registrado em: 30 Dez 2006 13:17
Localização: Teresina-PI
Contato:

Expressão Regular no SET FILTER

Mensagem por clodoaldomonteiro »

Vocês acham que teria como usar a função OrdWildSeek() para de alguma forma no Do While fazer esse controle?
At. Clodoaldo Monteiro
Linguagens: Clipper / Harbour
Área de Atuação: Sistemas de gestão para Prefeituras Municipais
Fones: (86)3223-0653, 98859-0236
www.simplesinformatica.com.br
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Expressão Regular no SET FILTER

Mensagem por Itamar M. Lins Jr. »

Ola!
Lógico. As informações para usar OrdWildSeek estão na string fornecida, é só pegar os pedaços usando substr(), at()... Tem um post mais abaixo que faço isso com arquivo .INI transformo em string e manipulo.
Por exemplo: "0010 até 0020" -> "0010-0020," ai o usuario escolhe mais uma "0001," só essa, depois escolhe de "00FF-00II" significa dá 00FF, 00GG, 00HH até 00II. Tudo isso em uma única string, "0010-0020,0001,00FF-00II"
Botar o neurônios ai para pensar como manipular(cortar) isso. O Guru "José Quintas" é fera nisso ai rsrsrss.

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Expressão Regular no SET FILTER

Mensagem por JoséQuintas »

Tenho no preview de relatório, pra escolher qualquer combinação de numeração de página.

https://github.com/JoseQuintas/JoseQuin ... review.prg

Mas no final, como deve ter alguma ordem isso, talvez jogar em array ou temporário.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
designsistemas
Usuário Nível 1
Usuário Nível 1
Mensagens: 3
Registrado em: 21 Set 2018 08:49
Localização: São Paulo / SP

Expressão Regular no SET FILTER

Mensagem por designsistemas »

bom dia,
Não sei o cenario que sera utilizado , mas caso estaja usando algum SGBD SQL, pode aplicar a expressão regular ja no select

Paulo Cezar
Design Sistemas
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Expressão Regular no SET FILTER

Mensagem por Itamar M. Lins Jr. »

Ola!
Não sei o cenario que sera utilizado , mas caso estaja usando algum SGBD SQL, pode aplicar a expressão regular ja no select
Está implícito na própria pergunta, se é SET FILTER e OrdWild... então é DBF. Se bem que hoje em dia se usa SQL até em DBF's.

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

Expressão Regular no SET FILTER

Mensagem por alxsts »

Olá!

Seja bem-vindo ao Fórum Paulo Cezar!
[]´s
Alexandre Santos (AlxSts)
designsistemas
Usuário Nível 1
Usuário Nível 1
Mensagens: 3
Registrado em: 21 Set 2018 08:49
Localização: São Paulo / SP

Expressão Regular no SET FILTER

Mensagem por designsistemas »

Ola Amigos,
vou me apresentar, minha historia se parece com a de muitos aqui. Tenho 52 anos, comecei na programação aos 16 anos. Iniciei no Basic, em seguida comecei a desenvolver usando Clipper Autumn 86, passando para o incrivel Summer 87, ai veio o CA-Clipper 5.0, etc... Depois de desilusões com o VB, em 2004 comecei com Harbour/Linux/MySQL que me levou ao xHarbour.com e SQLRDD. Muitas vezes fui socorrido por este forum.
Atualmente meus sistemas rodam nativo no Linux e Windows em interface texto, os relatórios gero em HTML e Excel, complemento com modulos PHP quando o cliente precisa de algo externo, por exemplo cotação de compra. Uso bastante pelo xHarbour consumo de web-service SOAP e REST para intergração com sites, mercado-livre, etc.
abs a todos.
Paulo Cezar
Design Sistemas
Avatar do usuário
filizola
Usuário Nível 3
Usuário Nível 3
Mensagens: 421
Registrado em: 19 Ago 2003 20:10
Localização: Belo Horizonte/MG

Expressão Regular no SET FILTER

Mensagem por filizola »

Ze quintas, esta sua rotina preview tem que ser compilada com wvg ou pode ser com wvt ?
"Um passo a frente, e já não estará mais no mesmo lugar..."
Avatar do usuário
clodoaldomonteiro
Usuário Nível 4
Usuário Nível 4
Mensagens: 821
Registrado em: 30 Dez 2006 13:17
Localização: Teresina-PI
Contato:

Expressão Regular no SET FILTER

Mensagem por clodoaldomonteiro »

Uma coisa que tem que ser feito, é uma Expressão regular para o GET das páginas a serem impressas.
Ex.: [001-010, 020, 030-040]
Vejam que na sequencia de páginas acima, o operador tem que respeitar a máscara de edição, acho que no PICT, onde só pode existir números, traço e a vírgula.
Então como montar esse Picture? com um LIKE?
At. Clodoaldo Monteiro
Linguagens: Clipper / Harbour
Área de Atuação: Sistemas de gestão para Prefeituras Municipais
Fones: (86)3223-0653, 98859-0236
www.simplesinformatica.com.br
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Expressão Regular no SET FILTER

Mensagem por JoséQuintas »

filizola escreveu:Ze quintas, esta sua rotina preview tem que ser compilada com wvg ou pode ser com wvt ?
O preview é console, exceto os botões.
Se retirar os botões ok, só vai precisar a mensagem pro usuário saber o que digitar.
E se tiver alguma dependência adicional, está toda aí no aplicativo, no GitHub.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
clodoaldomonteiro
Usuário Nível 4
Usuário Nível 4
Mensagens: 821
Registrado em: 30 Dez 2006 13:17
Localização: Teresina-PI
Contato:

Expressão Regular no SET FILTER

Mensagem por clodoaldomonteiro »

Continuando,

Já fiz a função para retornar uma array com os números de páginas a serem impressos.

Código: Selecionar todos

   /////////////////////////////////////////////////////////////////////////////
   //00010-00020,00030,00040-00045
Function cl_ParseNumero(cNumeros, nTamanho)
   Local i, ii, aTokens:={}, aCol:={}, aRetorno:={}

   aTokens := HB_ATokens( Alltrim(cNumeros), ",", .F., .F. )
   For i=1 To Len(aTokens)
      aCol := HB_ATokens( aTokens[i], "-", .F., .F. )
      aSort(aCol,,,{ |x, y| x[1] < y[1]} )
      If Len(aCol) > 1
         mIni:= Val(Alltrim(aCol[1]))
         mFim:= Val(Alltrim(aCol[2]))
         For ii = mIni To mFim
            AAdd(aRetorno, StrZero(ii, nTamanho) )
         Next
      Else
         AAdd(aRetorno, StrZero(Val(Alltrim(aCol[1])), nTamanho) )
      Endif
   Next

   Return aRetorno
   
Falta agora VALIDAR o campo Getado para que seja aceito somente caracteres válidos para esta rotina, que seriam: {0123456789-,}
At. Clodoaldo Monteiro
Linguagens: Clipper / Harbour
Área de Atuação: Sistemas de gestão para Prefeituras Municipais
Fones: (86)3223-0653, 98859-0236
www.simplesinformatica.com.br
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Expressão Regular no SET FILTER

Mensagem por JoséQuintas »

Código: Selecionar todos

FUNCTION ExtraiDeAte( cTexto, nTamanho )


   LOCAL aIntervalos, aItem, oDeAte, oNumero

   aIntervalos := {}
   FOR EACH oDeAte IN hb_regExSplit( cTexto, "," )
      aItem := {}
      FOR EACH oNumero IN hb_RegExSplit( oDeAte , "-" )
         Aadd( aItem, StrZero( Val( oNumero ), nTamanho )
      NEXT
      AAdd( aIntervalos, aItem )
   NEXT
   ASort( aIntervalos,,, {| a, b | a[ 1 ] < b[ 1 ] } )

   RETURN aIntervalos
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Responder