Página 1 de 1

Dúvida com array

Enviado: 07 Out 2015 13:24
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

Dúvida com array

Enviado: 07 Out 2015 13:50
por Jairo Maia
Olá Paulo,

Altere a linha 12 para:

Código: Selecionar todos

RETURN aDescCampoReq[ 1, nItem ]

Dúvida com array

Enviado: 07 Out 2015 14:28
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,

Dúvida com array

Enviado: 07 Out 2015 15:08
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


Dúvida com array

Enviado: 07 Out 2015 15:52
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