Clipper On Line • Ver Tópico - array-matriz

array-matriz

Discussão sobre a linguagem CA-Clipper.

Moderador: Moderadores

 

array-matriz

Mensagempor cleudsoncosta » 03 Out 2021 13:25

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
cleudsoncosta
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 3
Data de registro: 03 Out 2021 13:19
Cidade/Estado: TIMBABUA/PE
Curtiu: 1 vez
Mens.Curtidas: 1 vez

array-matriz

Mensagempor Jairo Maia » 03 Out 2021 19:17

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:
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
Abraç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)
Avatar de usuário

Jairo Maia
Colaborador

Colaborador
 
Mensagens: 2733
Data de registro: 16 Ago 2010 13:46
Cidade/Estado: Campinas-SP
Curtiu: 371 vezes
Mens.Curtidas: 305 vezes

array-matriz

Mensagempor alxsts » 03 Out 2021 23:28

Olá!

Bem-vindo!

O Jairo já resolveu mas, por que não usar array? Segue outra solução:
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)
alxsts
Colaborador

Colaborador
 
Mensagens: 2945
Data de registro: 12 Ago 2008 15:50
Cidade/Estado: São Paulo-SP-Brasil
Curtiu: 21 vezes
Mens.Curtidas: 248 vezes

array-matriz

Mensagempor cleudsoncosta » 04 Out 2021 10:30

obrigado a todos, alexandre faltou vc colocar a funcao Hb_Atokens q deu erro quando compilei
cleudsoncosta
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 3
Data de registro: 03 Out 2021 13:19
Cidade/Estado: TIMBABUA/PE
Curtiu: 1 vez
Mens.Curtidas: 1 vez

array-matriz

Mensagempor alxsts » 04 Out 2021 11:18

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
//--------------------------------------------------------------------------------------------------
[]´s
Alexandre Santos (AlxSts)
alxsts
Colaborador

Colaborador
 
Mensagens: 2945
Data de registro: 12 Ago 2008 15:50
Cidade/Estado: São Paulo-SP-Brasil
Curtiu: 21 vezes
Mens.Curtidas: 248 vezes

array-matriz

Mensagempor cleudsoncosta » 04 Out 2021 14:30

Agora sim tudo certo com os dois exemplo vlw obg.
cleudsoncosta
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 3
Data de registro: 03 Out 2021 13:19
Cidade/Estado: TIMBABUA/PE
Curtiu: 1 vez
Mens.Curtidas: 1 vez




Retornar para CA-Clipper

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 2 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro