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
Moderador: Moderadores

Código: Selecionar todos
For ii=20 to 10
...
Next
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

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

Se for no DBF, com orscope , não precisa achar intervalos.imprimir alguns determinados registro,

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
