De vez em quando precisamos contar quantos elementos temos em um vetor no banco (Adabas) através de um programa Natural.
Muitas vezes deparei com um código fazendo um loop de 1 a 199 e verificando um a um para ver se não está em branco ou zerado.
Ok! Às vezes é necessário, pois não se sabe como o programa foi inicialmente concebido e como pode se comportar (deixar posições sem uso, por exemplo). De qualquer forma, uma maneira de verificar a quantidade de elementos no vetor (múltiplo ou periódico) é usar o count:
IF C*GR-HISTORICO EQ 0...
Isso faz com que eu veja se está vazio – nunca foi populado -, ou já tem algo – quantos tem.
Hmmm deu pau 0047 (erro na definição da variável)…
Na definição do seu programa deve estar assim:
1 F513 VIEW OF AA-SIMRAV-ATIVACAO
...
2 C*GR-HISTORICO
2 GR-HISTORICO (1:191)
3 CO-HISTORICO
3 DA-HISTORICO
...
Deve-se repetir o campo, uma vez com o “C*” e a outra a definição propriamente dita. Aí funciona!
eu sei que podemos usar algo como:
if 10 eq vetor(*)
perform faca-algo
end-if
queria saber como saber em que posicao esta um valor no vetor sem ter que fazer um loop em todos os elementos, voces sabem se existe algo assim no natural?
obrigado
Boa noite Wilson,
Dê uma olhada no comando EXAMINE. Ele é muito poderoso para trabalhos com vetores e strings – varre, conta, substitui etc.
Talvez ajude este:
EXAMINE #TEXTO FOR #CARACTERE GIVING NUMBER #TOTAL
ou
EXAMINE #VETOR(*) FOR #ARR-VALORES(*) GIVING NUMBER #TOTAL
Aí se #TOTAL maior que 0, faça… você pode obter a posição da primeira ocorrência usando POSITION.
Olhe a documentação oficial do EXAMINE no site: http://documentation.softwareag.com/natural/nat638vms/sm/examine.htm
Espero ter ajudado! [pretendo postar algo sobre o EXAMINE]
Ola’ Daniel,
Sim, ajudou. Pelo que vi terei que usar redefine se o vetor for numérico!?
Obrigado,
Wilson.