Página 1 de 1

Socorro...controle do get

Enviado: 06 Dez 2004 21:08
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

Enviado: 06 Dez 2004 23:39
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

Enviado: 07 Dez 2004 00:39
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

Enviado: 07 Dez 2004 02:17
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.

Controle do get

Enviado: 07 Dez 2004 08:45
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 ?

Enviado: 07 Dez 2004 11:54
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.

Enviado: 07 Dez 2004 13:03
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...

Controle do get

Enviado: 07 Dez 2004 14:05
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

Enviado: 07 Dez 2004 16:00
por storm
Colega, utilize da forma como postei da ultima vez.
Testei aqui e funciona perfeitamente.

Enviado: 07 Dez 2004 16:07
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.

Enviado: 27 Nov 2006 15:32
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.