Socorro...controle do get
Moderador: Moderadores
Socorro...controle do get
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
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
-
Dudu_XBase
- Membro Master

- Mensagens: 1071
- Registrado em: 25 Ago 2003 16:55
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.....
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
Controle do get
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 ?
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 ?
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.
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

- Mensagens: 1071
- Registrado em: 25 Ago 2003 16:55
________________________________________________________________________________________________________
(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
Controle do get
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
Vcs ja tentaram criar uma array com os dados que passei e fazer o teste ?
Vcs verao que vai dar o erro
Valeu
Bom, vou mostrar o código que coloquei em meu teste:
Bom, da forma como postei acima, funcionou muito bem.
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
</body><body bgcolor=blue><h3>O ser humano que deixa de sonhar, deixa de viver...</h></body>
-
david.miguel
- Usuário Nível 1

- Mensagens: 34
- Registrado em: 07 Jul 2005 11:50
