Cortar, redimensionar array.

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

Moderador: Moderadores

Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7929
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Cortar, redimensionar array.

Mensagem 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.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

Cortar, redimensionar array.

Mensagem 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.
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 do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7929
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Cortar, redimensionar array.

Mensagem 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.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
Eolo
Colaborador
Colaborador
Mensagens: 1134
Registrado em: 08 Dez 2005 18:24
Localização: São Paulo - SP

Cortar, redimensionar array.

Mensagem 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)
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

Cortar, redimensionar array.

Mensagem por Jairo Maia »

Olá Itamar,

Então use True no terceiro parâmetro, que não precisa usar a ASize():
ADel( <aArray>, <nElement>, .T. )
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 do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7929
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Cortar, redimensionar array.

Mensagem por Itamar M. Lins Jr. »

Beleza, menos um comando!

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7929
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Cortar, redimensionar array.

Mensagem 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.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

Cortar, redimensionar array.

Mensagem 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.
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 do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

Cortar, redimensionar array.

Mensagem por Toledo »

Amigos, no Harbour use o hb_Adel():
hb_ADel( <aArray>, <nElement>, .T. )
Abraços,
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 do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

Cortar, redimensionar array.

Mensagem por Jairo Maia »

Certinho...

Obrigado Toledo pela informação.
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)
Responder