Bound Error.. Array Access

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

rangelssilva
Usuário Nível 1
Usuário Nível 1
Mensagens: 48
Registrado em: 27 Jul 2007 15:24
Localização: São Paulo - SP

Bound Error.. Array Access

Mensagem por rangelssilva »

Ao filtrar certos dados para serem colocados num vetor, utilizando achoice resulta em vazio....


Gostaria de saber como poderia fazer uma condicional dizendo se for vazio faça tal coisa... POis senão aparece a seguinte msg de erro: Bound Error array access....



If VenvetBr={}


Comandos

endif


Seria dessa maneira.. Não sei ao certo pois ten assim e deu errado....

Como utilizar uma condicional para isso...

Agradeço a colaboração amigos programadores.....
:'(
Editado pela última vez por rangelssilva em 07 Mar 2008 22:56, em um total de 1 vez.
Adalberto
Usuário Nível 3
Usuário Nível 3
Mensagens: 343
Registrado em: 01 Set 2007 01:09
Localização: Santa Cruz de la Sierra - Bolivia

Bound error

Mensagem por Adalberto »

Rangel

Pode perguntar assim:

IF EMPTY( LEN( VenvetBr ) )

Da Certo!
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Mensagem por Maligno »

Seu teste está correto. Mas não é necessário obter o tamanho da matriz. Você pode usar a forma simples de teste IF EMPTY(Matriz) que já é suficiente. Contudo, é importante lembrar que isso só funciona para matrizes unidimensionais. Se fosse uma matriz multidimensional, seria necessário proceder múltiplos testes em cada matriz interna.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Mensagem por Pablo César »

Permita-me colega Maligno, exemplificar para melhor comprensão de todos.

Quando temos uma MATRIZ multidimensional, por exemplo:

MATRIZ:={{},{},{}}

Perceba que esta matriz é composta por outras três matrizes "aninhadas" e elas estão VAZIAS. No entanto se precisar saber se estão vazias, você deveria testar matriz a matriz, como por exemplo assim:

Código: Selecionar todos

MATRIZ:={{},{},{}}
* MATRIZ:={{"a","bb"},{1,2,3},{date(),.T.}} // Habilite esta linha p/ver outro exemplo
VAZIA:=.T.
FOR I=1 TO LEN(MATRIZ)
    IF LEN(MATRIZ[I])>0
       VAZIA:=.F.
       EXIT
    ENDIF
NEXT
IF VAZIA=.T.
   ? "Matriz sem elemento algum. Vazia."
ELSE
   CONTA:=0
   FOR I=1 TO LEN(MATRIZ)
       CONTA:=CONTA+LEN(MATRIZ[I])
   NEXT
   ? "Matriz com "+ALLTRIM(STR(CONTA))+" elemento"+(IF(CONTA=0,"","s"))+". Nao esta vazia."
ENDIF
Agora como disseram os colegas Adalberto e Maligno, para o caso que seu VETOR ou MATRIZ seja UNIDIMENSIONAL, é só fazer:

Código: Selecionar todos

VenvetBr={}
* VenvetBr={}  // Habilite esta linha para ver outro exemplo
VenvetBr={}
* VenvetBr={"AAA","BBB"}  // Outro exemplo
VAZIA:=.T.
CONTA:=LEN(VenvetBr)
IF CONTA=0
   ? "Matriz sem elemento algum. Vazia."
ELSE
   ? "Matriz com "+ALLTRIM(STR(CONTA))+" elemento"+(IF(CONTA=0,"","s"))+". Nao esta vazia."
ENDIF
Melhor explicado que isso é só dois, três, quatro disso... hihihi
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
rangelssilva
Usuário Nível 1
Usuário Nível 1
Mensagens: 48
Registrado em: 27 Jul 2007 15:24
Localização: São Paulo - SP

Mensagem por rangelssilva »

Obrigado gente.... As vezes fica dificil pensar em muita coisa, principalmente quando se trabalha o dia todo..fiquei 4,5 anos construindo um pequenos sistema para controle de venda e leilões onde posso admistrar melhor meus bens..... Se eu fuzesse so isso e fosse um programador porfissional poderia fazer algo mais complexo> Como sei que aqui tem muita gente experiente , fica mais fácil conseguir o que se precisa depois que me esgotaram as energias...

Vou testar as opções e qualquer dúvida mando um post novamente.......

Tenham um ótimo fim de semana....
Boas programação...
:D
Avatar do usuário
gvc
Colaborador
Colaborador
Mensagens: 1270
Registrado em: 23 Ago 2005 10:57

Mensagem por gvc »

Eu uso:

if len(matriz) = 0 // Tá vazia
aadd(matriz, '')
end

ou

if len(matriz) = 0 // Tá vazia
aadd(matriz, {'', '', 0})
end

Boa sorte. Espero ter ajudado
"TRS-80/Sincler/Apple/PC - Clipper Winter 85, tlink 1.0 [pc 10 MHz - 640K] {NEZ 8000 2Kb RAM}"
{POG - Programação Orientada a Gambiarra}
microvolution
Usuário Nível 5
Usuário Nível 5
Mensagens: 1231
Registrado em: 02 Set 2011 22:17
Contato:

Bound Error.. Array Access

Mensagem por microvolution »

gente, de acordo com os exemplos postados, não sei se compreendi ao certo.
Estou a fazer um MENU GRÁFICO e os PROMPTs e os ACTIONs estou fazendo assim:

Código: Selecionar todos

DEFINE MAIN MENU 
            for I=1 TO LEN(MENU_GUI)
               if MENU_GUI[I,1]='HOR'
                  if !empty(MENU_GUI[I,2])
                     POPUP MENU_GUI [I,2]
                     // END POPUP
                  endif
                  if !empty(MENU_GUI[I,3])
                     POPUP MENU_GUI [I,3]
                     // END POPUP
                  endif
                  if !empty(MENU_GUI[I,4])
                     POPUP MENU_GUI [I,4]
                     // END POPUP
                  endif
                  // if !empty(MENU_GUI[I,5])
                  //   POPUP MENU_GUI [I,5]
                  //   END POPUP
                  // endif
                  // if !empty(MENU_GUI[I,6])
                  //   POPUP MENU_GUI [I,6]
                  //   END POPUP
                  // endif
               elseif  MENU_GUI[I,1]='CAD'
                  MENUITEM MENU_GUI [I,1] ACTION MENU_GUI [I,2]
               elseif  MENU_GUI[I,1]='CAD1'
                  SEPARATOR
                  POPUP MENU_GUI [I,2]
                  END POPUP
               endif
               END POPUP
            next
Acontece que a partir da linha COMENTADA (se não estiver comentada) aparece um erro de array. Na verdade preciso via programação verificar se esta posição está EMPTY/NIL, pra não dar o erro de array. Só que se colocar essa linha em funcionamento dá erro, se eu não colocá-la o erro para.

Agradeço a atenção de todos!
Ah! EU DECLARO QUE DEUS EXISTE! independente de sua crença nEle ou não, Ele sempre existiu e sempre existirá!
Grato,
MICROVOLUTION - 16 anos Evoluindo Com Você!


Você já leu a Bíblia hoje?
João 3:16 - Porque Deus amou ao mundo de tal maneira que deu seu Único Filho para que todo aquele que nEle crê não pereça mas tenha a Vida Eterna!
Responder