Socorro...controle do get

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

negrao
Usuário Nível 3
Usuário Nível 3
Mensagens: 186
Registrado em: 06 Jul 2004 08:38

Socorro...controle do get

Mensagem por negrao »

Pessoal, ve se tem como

Tenho um arquivo que contem os seguintes campos:
linha(n,02) , col(n,2) , campo(c,10) , xpict(c,10) , xvalid(c,10)

Qndo for montar meus gets vou ler desse arquivo e lancar em um arraY
AS INFORMACOES: aadd(narquivo,{linha,col,campo,xpict,xvalid})
Ficaria mais ou menos assim.

pos := 1
while pos <= len(narquivo)
@ narquivo[pos,1],narquiv[pos,2] get narquivo[pos,3] pict narquivo
[pos,4] valid xvalid[pos,5]
pos++
enddo
read

So que esta dando um erro, bond error, sei o motivo do erro mas nao to sabendo como fazer para arrumar.

Obrigado pela ajuda
storm
Usuário Nível 1
Usuário Nível 1
Mensagens: 41
Registrado em: 05 Dez 2004 23:56

Mensagem por storm »

Cara, tenta assim:

pos := 1
while pos <= len(narquivo)
@ narquivo[pos,1],narquiv[pos,2] get &(narquivo[pos,3]) pict narquivo
[pos,4] valid &(xvalid[pos,5] )
pos++
enddo
read
</body><body bgcolor=blue><h3>O ser humano que deixa de sonhar, deixa de viver...</h></body>
Dudu_XBase
Membro Master
Membro Master
Mensagens: 1071
Registrado em: 25 Ago 2003 16:55

Mensagem por Dudu_XBase »

eu identifiquei o seguinte erro nos comandos postados...
no segundo parametro do get esta nArquiv[pos,2] ao invés de nArquivo[npos,2] q é o nome do array correto criado

pos := 1
while pos <= len(narquivo)
@ narquivo[pos,1],narquiv[pos,2] get narquivo[pos,3] pict narquivo
[pos,4] valid xvalid[pos,5]
pos++
enddo
read


Eu acho melhor usar o For .... exemplo abaixo.....

Código: Selecionar todos

 
  if len(nArquivo) > 0
    For i:=1 to len(narquivo)
       @ narquivo[pos,1],narquivo[pos,2] get &(narquivo[pos,3]) pict narquivo
       [pos,4] valid &(xvalid[pos,5] )
    Next
    read
  Endif


________________________________________________________________________________________________________
(Aow Saudade) Clipper 5.2e, Blinker 7, RDD SIXNSX, DBFCDX /Xharbour 1.0, Rdd Mediator (Mysql) Free , RDD Sqlrdd (Sql Server) Comercial
(Hoje) C# Python Sql Server e Oracle




storm
Usuário Nível 1
Usuário Nível 1
Mensagens: 41
Registrado em: 05 Dez 2004 23:56

Mensagem por storm »

Valeu pela correção colega!

É que apenas copiei e colei o que o colega Negrao havia postado e fiz as alterações necessárias para que funcionasse.
</body><body bgcolor=blue><h3>O ser humano que deixa de sonhar, deixa de viver...</h></body>
negrao
Usuário Nível 3
Usuário Nível 3
Mensagens: 186
Registrado em: 06 Jul 2004 08:38

Controle do get

Mensagem por negrao »

Dudu, peguei sua funcao

if len(nArquivo) > 0
For i:=1 to len(narquivo)
@ narquivo[pos,1],narquivo[pos,2] get &(narquivo[pos,3]) pict narquivo
[pos,4] valid &(xvalid[pos,5] )
Next
read
Endif


Mas ja tinha tentado isso. o erro so da qndo se executa a clausula valid. pq qndo vou digitar os campos o valor de I nao deveria estar valendo 1 ?. pois nao esta, ele esta valendo mais que o tamanho do array.

Nao teria uma outra forma de se fazer isso ?
storm
Usuário Nível 1
Usuário Nível 1
Mensagens: 41
Registrado em: 05 Dez 2004 23:56

Mensagem por storm »

Colega Negrao,
O colega Dudu, ao postar seu código (o segundo), não se atentou para o fato de, na linha ele usar a variável pos, e no laço usar a variável i.
Tente assim:

if len(nArquivo) > 0
For i:=1 to len(narquivo)
if !empty(nArquivo[i,5])
@ narquivo[i,1],narquivo[i,2] get &(narquivo[i,3]) pict narquivo[i,4] valid &(nArquivo[i,5] )
else
@ narquivo[i,1],narquivo[i,2] get &(narquivo[i,3]) pict narquivo[i,4]
endif;
Next
read
Endif


Lembrando a vc que:
nArquivo[i,1] e nArquivo[i,2] -> São Numéricos
e os outros parametros do array são do tipo caractere.
</body><body bgcolor=blue><h3>O ser humano que deixa de sonhar, deixa de viver...</h></body>
Dudu_XBase
Membro Master
Membro Master
Mensagens: 1071
Registrado em: 25 Ago 2003 16:55

Mensagem por Dudu_XBase »

:D hehehe...eh memo... :oops:...vlw... (Y)....a noite qdo chego...depois de umas... (B) para aliviar o stress do fim de ano...


________________________________________________________________________________________________________
(Aow Saudade) Clipper 5.2e, Blinker 7, RDD SIXNSX, DBFCDX /Xharbour 1.0, Rdd Mediator (Mysql) Free , RDD Sqlrdd (Sql Server) Comercial
(Hoje) C# Python Sql Server e Oracle




negrao
Usuário Nível 3
Usuário Nível 3
Mensagens: 186
Registrado em: 06 Jul 2004 08:38

Controle do get

Mensagem por negrao »

Pessoal, a questao da variavel ser pos ou I é o de menos, o erro que da é pq a variavel I esta maior que o len(array).
Vcs ja tentaram criar uma array com os dados que passei e fazer o teste ?
Vcs verao que vai dar o erro

Valeu
storm
Usuário Nível 1
Usuário Nível 1
Mensagens: 41
Registrado em: 05 Dez 2004 23:56

Mensagem por storm »

Colega, utilize da forma como postei da ultima vez.
Testei aqui e funciona perfeitamente.
</body><body bgcolor=blue><h3>O ser humano que deixa de sonhar, deixa de viver...</h></body>
storm
Usuário Nível 1
Usuário Nível 1
Mensagens: 41
Registrado em: 05 Dez 2004 23:56

Mensagem por storm »

Bom, vou mostrar o código que coloquei em meu teste:

Código: Selecionar todos

Arq:={}
use cfgs new
while !eof()
  aadd( arq , { linha, coluna, campo, pict, valid } )
  skip
enddo
close cfgs
if len( arq ) = 0
  quit
endif
use cli new
for i:=1 to len(arq)
  v0:=alltrim(arq[i,3])
  v1:=alltrim(arq[i,5])
  @arq[i,1], arq[i,2] get &v0 picture alltrim(arq[i,4]) valid v1
next
read
Bom, da forma como postei acima, funcionou muito bem.
</body><body bgcolor=blue><h3>O ser humano que deixa de sonhar, deixa de viver...</h></body>
david.miguel
Usuário Nível 1
Usuário Nível 1
Mensagens: 34
Registrado em: 07 Jul 2005 11:50

Mensagem por david.miguel »

Estava procurando alguma coisa sobre o GET e surgiu uma duvida neste mesmo assunto, se a função estiver nula o sistema irá acusar um erro, pois não terá retorno, como faço um controle com a Classe GET.
Responder