Página 1 de 1

Cortar, redimensionar array.

Enviado: 26 Jul 2013 11:06
por Itamar M. Lins Jr.
Ola!

Tenho um array:
aTeste:={1,2,3,4,5,6,7,8,9}
Preciso cortar, redimensionar ele do inicio.
Se eu usar asize(aTeste,3) fica {1,2,3} eu preciso que fique: {4,5,6,7,8,9}.

Saudações,
Itamar M. Lins Jr.

Cortar, redimensionar array.

Enviado: 26 Jul 2013 11:33
por Jairo Maia
Olá Itamar,

Você pode usar o comando ACopy():

Código: Selecionar todos

ACopy( <aSource>, <aTarget>, [<nSourceStart>], [<nCount>], [<nTargetStart>] )
<aSource>
The source array whose elements are copied.
<aTarget>
The target array recieving copied values.
<nSourceStart>
This is a numeric expression indicating the first element in the source array to begin copying with. It defaults to 1, the first element of <aSource>.
<nCount>
A numeric expression specifying the number of elements to copy from <aSource> to <aTarget>. It defaults to the maximum possible number that can be copied. This number depends on the size of source and target array, and the start elements of both arrays.
<nTargetPos>
A numeric expression indicating the first element in the target array that receives copied values. It defaults to 1.

Cortar, redimensionar array.

Enviado: 26 Jul 2013 11:42
por Itamar M. Lins Jr.
Eu resolvi. :)
Tem coisas que só muito uso para entender, pelo menos comigo é assim.
Usei a tal adel() e depois asize()
Porque ?
Tem uma particularidade com array que passou esse tempo despercebido, eu não sabia que ao ser deletado via adel() ela vai para o final da fila.
Por exemplo aArray := {1,2,3,4,5,6,7,8,9}
adel(aArray,1) fica: {2,3,4,5,6,7,8,9,nil} o lugar do elemento, vai para o final da fila :) com isso é só usar depois o asize() :)

Saudações,
Itamar M. Lins Jr.

Cortar, redimensionar array.

Enviado: 26 Jul 2013 11:46
por Eolo
Acho que ACOPY() resolve seu problema.

local aTeste:={1,2,3,4,5,6,7,8,9}
local aNovo:-[4]
acopy(aTeste,aNovo,4,4,)

-> aNovo vai conter {4,5,6,7}

Os parâmetros de ACOPY():
1. array original
2. array destino
3. item inicial do array origem (default 1)
4. quantos itens copiar (default máximo possível)
5. em qual item (no destino) começar a cópia (default 1)

(editado pra complementar a resposta do Jairo)

Cortar, redimensionar array.

Enviado: 26 Jul 2013 12:03
por Jairo Maia
Olá Itamar,

Então use True no terceiro parâmetro, que não precisa usar a ASize():
ADel( <aArray>, <nElement>, .T. )

Cortar, redimensionar array.

Enviado: 26 Jul 2013 12:06
por Itamar M. Lins Jr.
Beleza, menos um comando!

Saudações,
Itamar M. Lins Jr.

Cortar, redimensionar array.

Enviado: 26 Jul 2013 12:08
por Itamar M. Lins Jr.
Testei aqui e não apagou será .F. ?
Não funcionou, adel(,,.t. ou .f.) não corta ou redimensiona a matriz, len() retorna sempre o mesmo tamanho.

Saudações,
Itamar M. Lins Jr.

Cortar, redimensionar array.

Enviado: 26 Jul 2013 12:37
por Jairo Maia
Olá Itamar,

O Default é .F., se .T. reajusta a matriz. Testei aqui com Harbour e realmente não funciona, ou a função ADel() em Harbour tem outra sintaxe. Achei que era igual ao xHarbour. Em xHarbour funciona ok.

Uma pena. Importante é que você resolveu. Valeu.

Cortar, redimensionar array.

Enviado: 26 Jul 2013 14:51
por Toledo
Amigos, no Harbour use o hb_Adel():
hb_ADel( <aArray>, <nElement>, .T. )
Abraços,

Cortar, redimensionar array.

Enviado: 26 Jul 2013 19:35
por Jairo Maia
Certinho...

Obrigado Toledo pela informação.