Página 2 de 2

Expressão Regular no SET FILTER

Enviado: 27 Set 2018 11:47
por clodoaldomonteiro
Quintas,

o ASorte tem que ser feito/verificado antes do segundo FOR, pois pode ser que o usuário passe o seguinte intervalo:
[020-010,040-050],
Daí sem o ASorte no lugar correto, no segundo FOR teríamos:

Código: Selecionar todos

For ii=20 to 10
   ...
Next
Acho que não aconteceria nada dentro desse FOR.

Expressão Regular no SET FILTER

Enviado: 27 Set 2018 11:56
por JoséQuintas
Essa checagem teria que ser feita na validação.
Talvez até mesmo depois do ASort(), tanto faz.

Código: Selecionar todos

lOk := .T.
IF Len( oElement ) > 1 .AND. oElement[ 1 ] > oELement[ 2 ]
   lOk := .F.
   MsgExclamation( "Intervalo errado " + Str( oElement[ 1 ] ) + " " + Str( oElement[ 2 ] ) )
ENDIF

Expressão Regular no SET FILTER

Enviado: 27 Set 2018 12:00
por JoséQuintas
Se for pra apenas inverter:

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
      aSort( aItem, { | a, b | a < b } )
      AAdd( aIntervalos, aItem )
   NEXT
   ASort( aIntervalos,,, {| a, b | a[ 1 ] < b[ 1 ] } )

   RETURN aIntervalos

Expressão Regular no SET FILTER

Enviado: 27 Set 2018 12:21
por Itamar M. Lins Jr.
Ola!
imprimir alguns determinados registro,
Se for no DBF, com orscope , não precisa achar intervalos.
00010-00030, não precisa achar 00011, 00012... No ordScope está dentro esses registros.
Se for um arquivo(texto) ai não sei(paginas de um relatório), Mas como foi perguntado com SET FILTER ...

Saudações,
Itamar M. Lins Jr.

Expressão Regular no SET FILTER

Enviado: 27 Set 2018 12:33
por JoséQuintas
Na prática nem scope, nem filter, nem nada.
No começo ele disse que imprime CADA ficha, sendo assim:

Código: Selecionar todos

FOR EACH oDeAte IN aIntervalos
   SEEK oDeAte[ 1 ] SOFTSEEK
   DO WHILE .T.
      IF Len( oDeAte ) == 1 .AND. arquivo->Código != oDeAte[ 1 ] 
        EXIT
      ENDIF
      IF Len( oDeAte ) == 2 .AND. arquivo->Código > oDeAte[ 2 ]
         EXIT
      ENDIF
      IMprime()
      SKIP
   ENDDO
NEXT

Expressão Regular no SET FILTER

Enviado: 27 Set 2018 12:39
por clodoaldomonteiro
Boa tarde Itamar,

É que antes eu imaginava ter a possibilidade de fazer isso na hora do SET FILTER, mas no desenrolar, vi que o buraco era mais em baixo.