Ola pessoal gostaria de saber se algum prode da uma dica de como fazer isso:
tenho um banco de dados com 3 campos: numeros, num2, resto,
os dados sao:
numeros: 01/02/03/04/05/06/07/08/09/10;
num2: 01-05-08-10
gostaria de saber como preencher o campo resto com as dezenas que nao tem em num2 ou seja resto seria:
resto: 02-03-04-06-07-09
array-matriz
Moderador: Moderadores
-
cleudsoncosta
- Usuário Nível 1

- Mensagens: 3
- Registrado em: 03 Out 2021 13:19
- Localização: TIMBABUA/PE
- Jairo Maia
- Moderador
- Mensagens: 2785
- Registrado em: 16 Ago 2010 13:46
- Localização: Campinas-SP
array-matriz
Olá cleudsoncosta,
Seja Bem Vindo ao Fórum.
Porque precisa ser Array? Alguma razão pra isso? Se tiver basta inserir num Array a variável cResto. Veja se esse exemplo ajuda:
Seja Bem Vindo ao Fórum.
Porque precisa ser Array? Alguma razão pra isso? Se tiver basta inserir num Array a variável cResto. Veja se esse exemplo ajuda:
Código: Selecionar todos
Local aFileDbf, cCampo1, cCampo2, cResto, cDezena
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 := ""
cCampo1 := numeros
cCampo2 := num2
cCampo1 := StrTran( cCampo1, "/" ) // tira a barra
cCampo1 := StrTran( cCampo1, ";" ) // tira o ";"
For x := 1 To Len( cCampo1 ) Step 2
cDezena := SubStr( cCampo1, x, 2 )
If !( cDezena $ cCampo2 )
cResto += cDezena + "-"
EndIf
Next
Replace resto With Left( cResto, Len( cResto ) - 1 )
Skip
EndDo
Return NilAbraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
-
alxsts
- Colaborador

- Mensagens: 3092
- Registrado em: 12 Ago 2008 15:50
- Localização: São Paulo-SP-Brasil
array-matriz
Olá!
Bem-vindo!
O Jairo já resolveu mas, por que não usar array? Segue outra solução:
Bem-vindo!
O Jairo já resolveu mas, por que não usar array? Segue outra solução:
Código: Selecionar todos
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, "-" )
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[]´s
Alexandre Santos (AlxSts)
Alexandre Santos (AlxSts)
-
cleudsoncosta
- Usuário Nível 1

- Mensagens: 3
- Registrado em: 03 Out 2021 13:19
- Localização: TIMBABUA/PE
array-matriz
obrigado a todos, alexandre faltou vc colocar a funcao Hb_Atokens q deu erro quando compilei
-
alxsts
- Colaborador

- Mensagens: 3092
- Registrado em: 12 Ago 2008 15:50
- Localização: São Paulo-SP-Brasil
array-matriz
Olá!
Criei uma que faz a mesma coisa e dei a ela o nome aTokens. Veja o código abaixo.
Desculpe. Não vi que a tua necessidade se refere a Clipper. Hb_ATokens() é uma função Harbour.cleudsoncosta escreveu:faltou vc colocar a funcao Hb_Atokens q deu erro quando compilei
Criei uma que faz a mesma coisa e dei a ela o nome aTokens. Veja o código abaixo.
Código: Selecionar todos
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
//--------------------------------------------------------------------------------------------------[]´s
Alexandre Santos (AlxSts)
Alexandre Santos (AlxSts)
-
cleudsoncosta
- Usuário Nível 1

- Mensagens: 3
- Registrado em: 03 Out 2021 13:19
- Localização: TIMBABUA/PE