Página 1 de 1
array-matriz
Enviado: 03 Out 2021 13:25
por cleudsoncosta
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
Enviado: 03 Out 2021 19:17
por Jairo Maia
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:
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 Nil
array-matriz
Enviado: 03 Out 2021 23:28
por alxsts
Olá!
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
array-matriz
Enviado: 04 Out 2021 10:30
por cleudsoncosta
obrigado a todos, alexandre faltou vc colocar a funcao Hb_Atokens q deu erro quando compilei
array-matriz
Enviado: 04 Out 2021 11:18
por alxsts
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.
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
//--------------------------------------------------------------------------------------------------
array-matriz
Enviado: 04 Out 2021 14:30
por cleudsoncosta
Agora sim tudo certo com os dois exemplo vlw obg.