Página 1 de 1
Como usar a função ACopy()
Enviado: 09 Abr 2019 14:44
por Jairo Maia
Olá Pessoal,
Alguém sabe como usar essa função?:
ACopy( <aSource>, <aTarget>, [<nSourceStart>], [<nCount>], [<nTargetStart>] ) --> aTarget
Código: Selecionar todos
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.
Como usar a função ACopy()
Enviado: 09 Abr 2019 16:02
por Toledo
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.
Como usar a função ACopy()
Enviado: 09 Abr 2019 16:22
por gilbertosilverio
Ola Jairo,
Acho que acopy(), concatena matriz, ela copia de uma para outra...
Não e isso?
Olha o help do Harbour.
Como usar a função ACopy()
Enviado: 09 Abr 2019 17:01
por Kapiaba
Buenas, não entendi a utilidade deste comando.
Código: Selecionar todos
#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.
Como usar a função ACopy()
Enviado: 09 Abr 2019 17:09
por Kapiaba
E este?
Código: Selecionar todos
#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
Como usar a função ACopy()
Enviado: 09 Abr 2019 18:09
por asimoes
No fonte da hbmk2 tem essa function usando
acopy
Código: Selecionar todos
STATIC FUNCTION ArrayJoin( arraySrc1, arraySrc2 )
LOCAL arrayNew := AClone( arraySrc1 )
LOCAL nLen1 := Len( arrayNew )
ASize( arrayNew, nLen1 + Len( arraySrc2 ) )
RETURN ACopy( arraySrc2, arrayNew, , , nLen1 + 1 )
Como usar a função ACopy()
Enviado: 09 Abr 2019 18:13
por asimoes
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 */
Como usar a função ACopy()
Enviado: 09 Abr 2019 18:27
por asimoes
Vai copiar até o 4 elemento
Código: Selecionar todos
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 ) } )
Como usar a função ACopy()
Enviado: 10 Abr 2019 10:04
por Jairo Maia
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:
Código: Selecionar todos
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.