Dúvida com array

Projeto MiniGui - Biblioteca visual para Harbour/xHarbour

Moderador: Moderadores

Paulo_CPV
Usuário Nível 3
Usuário Nível 3
Mensagens: 178
Registrado em: 07 Mar 2013 10:27
Localização: Jacarei/SP

Dúvida com array

Mensagem por Paulo_CPV »

Boa tarde!

Amigos deu um branco total em mim e gostaria de tirar uma dúvida em relação a Array com vocês. Tenho a seguinte função:

Código: Selecionar todos

FUNCTION DescCampoReq( nItem )

   LOCAL aDescCampoReq := {}

   AADD( aDescCampoReq , { 'NIT','Nome do(a) Servidor(a)','Número Expediente' ,;
                             'Sexo','Data de Nascimento','CPF','Nome da Mãe' ,;
                             'CEP','Endereço','Bairro','Município','Estado' ,;
                             'Tipo Aposentadoria','Tempo Total','Tempo RGPS' ,;
                             'Valor Conceção','DIB','DCB','CNPJ','Matricula Ativo' ,;
                             'Data Ingresso','Matricula Aposentado' } )

RETURN aDescCampoReq[nItem]
Quando eu faço o teste com a função MSGINFO ela me mostra toda a sequencia da Array, o correto era me mostrar só a opção que eu defino:

Código: Selecionar todos

MSGINFO( DescCampoReq(1))


Não está me mostrando somente o item 1 (NIT) e assim por diante

[]'s

Paulo - Jacareí/SP
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

Dúvida com array

Mensagem por Jairo Maia »

Olá Paulo,

Altere a linha 12 para:

Código: Selecionar todos

RETURN aDescCampoReq[ 1, nItem ]
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:

Dúvida com array

Mensagem por Toledo »

Outra opção seria:

Código: Selecionar todos

FUNCTION DescCampoReq( nItem )

   LOCAL aDescCampoReq := { 'NIT','Nome do(a) Servidor(a)','Número Expediente' ,;
                             'Sexo','Data de Nascimento','CPF','Nome da Mãe' ,;
                             'CEP','Endereço','Bairro','Município','Estado' ,;
                             'Tipo Aposentadoria','Tempo Total','Tempo RGPS' ,;
                             'Valor Conceção','DIB','DCB','CNPJ','Matricula Ativo' ,;
                             'Data Ingresso','Matricula Aposentado' }

RETURN aDescCampoReq[nItem]
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
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Dúvida com array

Mensagem por asimoes »

Pode retornar assim também:

Código: Selecionar todos

FUNCTION DescCampoReq( nItem )

   LOCAL aDescCampoReq := {}, cCampo:=""

   AADD( aDescCampoReq , { 'NIT','Nome do(a) Servidor(a)','Número Expediente' ,;
                             'Sexo','Data de Nascimento','CPF','Nome da Mãe' ,;
                             'CEP','Endereço','Bairro','Município','Estado' ,;
                             'Tipo Aposentadoria','Tempo Total','Tempo RGPS' ,;
                             'Valor Conceção','DIB','DCB','CNPJ','Matricula Ativo' ,;
                             'Data Ingresso','Matricula Aposentado' } )

   aEval(aDescCampoReq, {|x|cCampo:=x[ nItem ] })

RETURN cCampo

►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)
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

Dúvida com array

Mensagem por alxsts »

Olá!

Se entendi bem, o problema está na montagem do array. Ele tem apenas uma linha, com n colunas e creio que o OP deseje um array de uma coluna com n linhas. Vejam se esta solução atende. Não compilei nem testei.

Código: Selecionar todos

FUNCTION Main()

   LOCAL i
   
   SetMode(25,80)
   CLS

   FOR i := 1 TO 30
      QOut( DescCampoReq( i ) )
   NEXT
   
   // chamada final para liberar memória
   DescCampoReq(0)
   
RETURN NIL

//-----------------------------------------------------------------------------------
   
FUNCTION DescCampoReq( nItem )

   STATIC aDescCampoReq

   LOCAL cCampo
   
   IF Empty( aDescCampoReq )
      // se primeira entrada na função, carrega o array estático (apenas uma vez)
      aDescCampoReq := {}
      AADD( aDescCampoReq, 'NIT' )
      AADD( aDescCampoReq, 'Nome do(a) Servidor(a)' )
      AADD( aDescCampoReq, 'Número Expediente' )
      AADD( aDescCampoReq, 'Sexo' )
      AADD( aDescCampoReq, 'Data de Nascimento' )
      AADD( aDescCampoReq, 'CPF' )
      AADD( aDescCampoReq, 'Nome da Mãe' )
      AADD( aDescCampoReq, 'CEP' )
      AADD( aDescCampoReq, 'Endereço' )
      AADD( aDescCampoReq, 'Bairro' )
      AADD( aDescCampoReq, 'Município' )
      AADD( aDescCampoReq, 'Estado' )
      AADD( aDescCampoReq, 'Tipo Aposentadoria' )
      AADD( aDescCampoReq, 'Tempo Total' )
      AADD( aDescCampoReq, 'Tempo RGPS' )
      AADD( aDescCampoReq, 'Valor Conceção' )
      AADD( aDescCampoReq, 'DIB' ),' )DCB' )
      AADD( aDescCampoReq, 'CNPJ' ),' )Matricula Ativo' )
      AADD( aDescCampoReq, 'Data Ingresso' )
      AADD( aDescCampoReq, 'Matricula Aposentado' )
   ENDIF

   IF Valtype( nItem ) == 'N' .AND. nItem > 0 .AND. nItem <= Len( aDescCampoReq )
      cCampo := aDescCampoReq[ nItem ]
   ELSEIF Valtype( nItem ) == 'N' .AND. nItem = 0 
      // libera a memória usada
      aDescCampoReq := NIL
   ENDIF
 
RETURN cCampo
[]´s
Alexandre Santos (AlxSts)
Responder