Página 1 de 2
Expressão Regular no SET FILTER
Enviado: 20 Set 2018 10:17
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
Expressão Regular no SET FILTER
Enviado: 20 Set 2018 10:59
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 )
Expressão Regular no SET FILTER
Enviado: 20 Set 2018 12:49
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.
Expressão Regular no SET FILTER
Enviado: 20 Set 2018 13:43
por clodoaldomonteiro
Vocês acham que teria como usar a função OrdWildSeek() para de alguma forma no Do While fazer esse controle?
Expressão Regular no SET FILTER
Enviado: 20 Set 2018 15:16
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.
Expressão Regular no SET FILTER
Enviado: 20 Set 2018 16:07
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.
Expressão Regular no SET FILTER
Enviado: 21 Set 2018 09:39
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
Expressão Regular no SET FILTER
Enviado: 21 Set 2018 15:14
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.
Expressão Regular no SET FILTER
Enviado: 21 Set 2018 17:24
por alxsts
Olá!
Seja bem-vindo ao Fórum Paulo Cezar!
Expressão Regular no SET FILTER
Enviado: 22 Set 2018 14:33
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
Expressão Regular no SET FILTER
Enviado: 24 Set 2018 17:07
por filizola
Ze quintas, esta sua rotina preview tem que ser compilada com wvg ou pode ser com wvt ?
Expressão Regular no SET FILTER
Enviado: 27 Set 2018 08:04
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?
Expressão Regular no SET FILTER
Enviado: 27 Set 2018 08:22
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.
Expressão Regular no SET FILTER
Enviado: 27 Set 2018 10:58
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-,}
Expressão Regular no SET FILTER
Enviado: 27 Set 2018 11:11
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