Clipper On Line • Ver Tópico - Expressão Regular no SET FILTER

Expressão Regular no SET FILTER

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

Moderador: Moderadores

 

Expressão Regular no SET FILTER

Mensagempor clodoaldomonteiro » 20 Set 2018 10:17

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 de usuário

clodoaldomonteiro
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 741
Data de registro: 30 Dez 2006 12:17
Cidade/Estado: Teresina-PI
Curtiu: 110 vezes
Mens.Curtidas: 31 vezes

Expressão Regular no SET FILTER

Mensagempor JoséQuintas » 20 Set 2018 10:59

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.

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, multithread, dbfcdx, ADO+MySql, PNotepad
"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 de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18015
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Expressão Regular no SET FILTER

Mensagempor Itamar M. Lins Jr. » 20 Set 2018 12:49

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.
Avatar de usuário

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 6927
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 309 vezes
Mens.Curtidas: 503 vezes

Expressão Regular no SET FILTER

Mensagempor clodoaldomonteiro » 20 Set 2018 13:43

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 de usuário

clodoaldomonteiro
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 741
Data de registro: 30 Dez 2006 12:17
Cidade/Estado: Teresina-PI
Curtiu: 110 vezes
Mens.Curtidas: 31 vezes

Expressão Regular no SET FILTER

Mensagempor Itamar M. Lins Jr. » 20 Set 2018 15:16

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.
Avatar de usuário

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 6927
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 309 vezes
Mens.Curtidas: 503 vezes

Expressão Regular no SET FILTER

Mensagempor JoséQuintas » 20 Set 2018 16:07

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

https://github.com/JoseQuintas/JoseQuintas/blob/master/source/ze_preview.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, multithread, dbfcdx, ADO+MySql, PNotepad
"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 de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18015
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Expressão Regular no SET FILTER

Mensagempor designsistemas » 21 Set 2018 09:39

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
designsistemas
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 3
Data de registro: 21 Set 2018 08:49
Cidade/Estado: São Paulo / SP
Curtiu: 5 vezes
Mens.Curtidas: 0 vez

Expressão Regular no SET FILTER

Mensagempor Itamar M. Lins Jr. » 21 Set 2018 15:14

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.
Avatar de usuário

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 6927
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 309 vezes
Mens.Curtidas: 503 vezes

Expressão Regular no SET FILTER

Mensagempor alxsts » 21 Set 2018 17:24

Olá!

Seja bem-vindo ao Fórum Paulo Cezar!
[]´s
Alexandre Santos (AlxSts)
alxsts
Colaborador

Colaborador
 
Mensagens: 2943
Data de registro: 12 Ago 2008 15:50
Cidade/Estado: São Paulo-SP-Brasil
Curtiu: 21 vezes
Mens.Curtidas: 248 vezes

Expressão Regular no SET FILTER

Mensagempor designsistemas » 22 Set 2018 14:33

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
designsistemas
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 3
Data de registro: 21 Set 2018 08:49
Cidade/Estado: São Paulo / SP
Curtiu: 5 vezes
Mens.Curtidas: 0 vez

Expressão Regular no SET FILTER

Mensagempor filizola » 24 Set 2018 17:07

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 de usuário

filizola
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 412
Data de registro: 19 Ago 2003 20:10
Cidade/Estado: Belo Horizonte/MG
Curtiu: 5 vezes
Mens.Curtidas: 6 vezes

Expressão Regular no SET FILTER

Mensagempor clodoaldomonteiro » 27 Set 2018 08:04

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 de usuário

clodoaldomonteiro
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 741
Data de registro: 30 Dez 2006 12:17
Cidade/Estado: Teresina-PI
Curtiu: 110 vezes
Mens.Curtidas: 31 vezes

Expressão Regular no SET FILTER

Mensagempor JoséQuintas » 27 Set 2018 08:22

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, multithread, dbfcdx, ADO+MySql, PNotepad
"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 de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18015
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Expressão Regular no SET FILTER

Mensagempor clodoaldomonteiro » 27 Set 2018 10:58

Continuando,

Já fiz a função para retornar uma array com os números de páginas a serem impressos.
   /////////////////////////////////////////////////////////////////////////////
   //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 de usuário

clodoaldomonteiro
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 741
Data de registro: 30 Dez 2006 12:17
Cidade/Estado: Teresina-PI
Curtiu: 110 vezes
Mens.Curtidas: 31 vezes

Expressão Regular no SET FILTER

Mensagempor JoséQuintas » 27 Set 2018 11:11

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, multithread, dbfcdx, ADO+MySql, PNotepad
"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 de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18015
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Próximo



Retornar para Harbour

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 5 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro