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

hehehe...eh memo...

...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.