Clipper On Line • Ver Tópico - Como usar a função ACopy()

Como usar a função ACopy()

Projeto Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

 

Como usar a função ACopy()

Mensagempor Jairo Maia » 09 Abr 2019 14:44

Olá Pessoal,

Alguém sabe como usar essa função?:

ACopy( <aSource>, <aTarget>, [<nSourceStart>], [<nCount>], [<nTargetStart>] ) --> aTarget

Function Main()
Local x, aDados:={}, aDadosPrint:={}, nElementos:=100

For x = 1 To nElementos
  AaDd( aDados, "Elemento " + Hb_NToS( x ) )
Next

Clear Screen

?
? Len( aDados )

//ACopy( aDados, aDadosPrint, 1, Len( aDados ) - 4, 1 )  // não funciona,
aDadosPrint := ACopy( aDados, aDadosPrint, 1, Len( aDados ) - 4, 1 )    // e não funciona

?
? Len( aDadosPrint )

Return Nil


A solução foi usar ASize(), mas não entendo porque ACopy() não funciona.
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

Como usar a função ACopy()

Mensagempor Toledo » 09 Abr 2019 16:02

Jairo, veja o que o help desta função diz:

O processo de cópia é concluído quando os elementos <nCount> são copiados ou o último elemento em um dos dois arrays é atingido. Se a matriz de origem contiver mais elementos que a matriz de destino, a cópia será interrompida quando o último elemento da matriz de destino for atingido e vice-versa. O número de elementos em ambos os arrays não é alterado por ACopy ().


Então, como no seu exemplo aDadosPrint:={} não tem elemento nenhum, não será copiado nada. Neste caso aDadosPrint:={} teria que ter o mesmo número de elementos de aDados:={}, ou pelo menos o número de elementos que você quer copiar de aDados para aDadosPrint.
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
Avatar de usuário

Toledo
Administrador

Administrador
 
Mensagens: 3038
Data de registro: 22 Jul 2003 18:39
Cidade/Estado: Araçatuba - SP
Curtiu: 263 vezes
Mens.Curtidas: 258 vezes

Como usar a função ACopy()

Mensagempor gilbertosilverio » 09 Abr 2019 16:22

Ola Jairo,

Acho que acopy(), concatena matriz, ela copia de uma para outra...

Não e isso?

Olha o help do Harbour.
Anexos
Capturar.JPG
gilbertosilverio
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 332
Data de registro: 18 Jan 2009 09:39
Cidade/Estado: Ribeirao Pires - SP
Curtiu: 1 vez
Mens.Curtidas: 23 vezes

Como usar a função ACopy()

Mensagempor Kapiaba » 09 Abr 2019 17:01

Buenas, não entendi a utilidade deste comando.

#include "FiveWin.ch"

FUNCTION Main()

   LOCAL nCount := 2, nStart := 1, aOne, aTwo, cResult

   aOne := { "HARBOUR", " IS ", "POWER"}

   aTwo := { "CLIPPER", " WAS ", "POWER"}

   ACopy( aOne, aTwo, nStart, nCount )

   // ?  aOne[1], aOne[2], aTwo[1]  // harbour is power.

   cResult :=  HB_ValToExp( aTwo )

   ? cResult

RETURN NIL


Obg. abs.
Kapiaba
Colaborador

Colaborador
 
Mensagens: 1765
Data de registro: 07 Dez 2012 15:14
Cidade/Estado: São Paulo
Curtiu: 310 vezes
Mens.Curtidas: 119 vezes

Como usar a função ACopy()

Mensagempor Kapiaba » 09 Abr 2019 17:09

E este?

#include "FiveWin.ch"

FUNCTION Main()

   LOCAL aOne, aTwo

   aOne := { "Harbour"," is ","POWER" }

   aTwo := AClone( aOne )       // Result: aTwo is {"Harbour"," is ","POWER"}

   aOne[ 1 ] := "The Harbour Compiler"

   // Result:
   // aOne is { "The Harbour Compiler", " is ", "POWER" }
   // aTwo is { "Harbour"," is ","POWER" }

RETURN NIL
Kapiaba
Colaborador

Colaborador
 
Mensagens: 1765
Data de registro: 07 Dez 2012 15:14
Cidade/Estado: São Paulo
Curtiu: 310 vezes
Mens.Curtidas: 119 vezes

Como usar a função ACopy()

Mensagempor asimoes » 09 Abr 2019 18:09

No fonte da hbmk2 tem essa function usando acopy

STATIC FUNCTION ArrayJoin( arraySrc1, arraySrc2 )

   LOCAL arrayNew := AClone( arraySrc1 )
   LOCAL nLen1 := Len( arrayNew )

   ASize( arrayNew, nLen1 + Len( arraySrc2 ) )

   RETURN ACopy( arraySrc2, arrayNew, , , nLen1 + 1 )
â–ºHarbour 3.x | Minigui xx-x | HwGuiâ—„
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes

Como usar a função ACopy()

Mensagempor asimoes » 09 Abr 2019 18:13

Pesquisando mais na 3.4

Fonte: rt_array.prg

HBTEST TAStr( ACopy( TARng(), TANew(), 21 ) ) IS ".........." /* Bug in CA-Cl*pper, it will return: "J.........", fixed in 5.3a */
â–ºHarbour 3.x | Minigui xx-x | HwGuiâ—„
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes

Como usar a função ACopy()

Mensagempor asimoes » 09 Abr 2019 18:27

Vai copiar até o 4 elemento
   nCont := 0
   aSource := {1,2,3,4,5,6,7,8,9,10}
   aTarget := {}
   aEval( aSource, { |x| nCont++, If( nCont < 5, aAdd( aTarget, x ), Nil ) } )
   
â–ºHarbour 3.x | Minigui xx-x | HwGuiâ—„
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes

Como usar a função ACopy()

Mensagempor Jairo Maia » 10 Abr 2019 10:04

Olá Pessoal,

Obrigado a todos!

Toledo escreveu:Jairo, veja o que o help desta função diz:

O processo de cópia é concluído quando os elementos <nCount> são copiados ou o último elemento em um dos dois arrays é atingido. Se a matriz de origem contiver mais elementos que a matriz de destino, a cópia será interrompida quando o último elemento da matriz de destino for atingido e vice-versa. O número de elementos em ambos os arrays não é alterado por ACopy ().
Isso mesmo. Eu não estava entendendo essa parte. Agora funciona:

Function Main()
Local x, aDados:={}, aDadosPrint:={}, nElementos:=100

For x = 1 To nElementos
  AaDd( aDados, "Elemento " + Hb_NToS( x ) )
Next

Clear Screen

?
? Len( aDados )

aDadosPrint := Array( Len( aDados ) - 4 )  // coloca o número de elementos desejado na matriz...

aDadosPrint := ACopy( aDados, aDadosPrint )  // assim funcionou...

?
? Len( aDadosPrint )
?
? Atail( aDadosPrint )
?

Return Nil


gilbertosilverio escreveu:Acho que acopy(), concatena matriz, ela copia de uma para outra...
Sim. Mas entendi isso somente agora.

Kapiaba escreveu:Buenas, não entendi a utilidade deste comando.
Pois é... Acabei solucionando com ASize(), então nem vou usar ACopy(). Agora, nem vejo muita utilidade nela, para meu caso. Mas queria entender onde eu estava errando.
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




Retornar para Harbour

Quem está online

Usuários vendo este fórum: Google [Bot] e 9 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