Olá!
cleudsoncosta escreveu:faltou vc colocar a funcao Hb_Atokens q deu erro quando compilei
Desculpe. Não vi que a tua necessidade se refere a Clipper. Hb_ATokens() é uma função Harbour.
Criei uma que faz a mesma coisa e dei a ela o nome aTokens. Veja o código abaixo.
FUNCTION Main()
Local aFileDbf, aCampo1, aCampo2, cResto
SetMode( 25, 120 )
If !File( "Teste.Dbf" )
aFileDbf := {;
{"numeros" ,"C", 40, 0},;
{"num2" ,"C", 40, 0},;
{"resto" ,"C", 40, 0};
}
DBCreate( "Teste.Dbf", aFileDbf )
Use "Teste.Dbf"
APPEND BLANK
Replace numeros With "01/02/03/04/05/06/07/08/09/10;"
Replace num2 With "01-05-08-10"
Else
Use "Teste.Dbf"
EndIf
While !Eof()
cResto := ""
//aCampo1 := Hb_Atokens( StrTran( Teste->numeros, ";", "" ), "/" )
//aCampo2 := Hb_Atokens( Teste->num2, "-" )
aCampo1 := aTokens( StrTran( Teste->numeros, ";", "" ), "/" )
aCampo2 := aTokens( Teste->num2, "-" )
AEval( aCampo1, { |x,p| cResto += If( Ascan( aCampo2, x ) == 0, If( Empty( cResto ), "", "-" ) + x, "" ) } )
Replace Teste->resto With cResto
Skip
EndDo
Browse( 2, 5, 20, 118 )
CLS
__Quit()
Return Nil
//--------------------------------------------------------------------------------------------------
FUNCTION aTokens( cString, cDelimiter )
LOCAL aRet := {}, nPos
IF ! Empty( cString := AllTrim( cString ) )
If ! Empty( cDelimiter )
While ! Empty( cString )
If ( nPos := At( cDelimiter, cString ) ) > 0
AAdd( aRet, Left( cString, nPos - 1) )
cString := Substr( cString, nPos + 1 )
Else
Exit
Endif
Enddo
Endif
Endif
AAdd( aRet, cString )
RETURN aRet
//--------------------------------------------------------------------------------------------------