quinta-feira, 17 de março de 2016

Lendo Arquivo Texto Até Final de Arquivo - EOT



Forum.pcsoft.fr/pt-BR/pcsoft.br.windev/1074-lendo-arquivo-texto-ate-final-arquivo-eot/read.awp


Olá,

quero compartilhar com vocês uma situação que aconteceu comigo na importação de arquivo texto para tabelas do sistema.

O primeiro código é para importar os registros para a tabela Paises e por o campo chave (Codigo_do_pais) ser do tipo INT o final de arquivo funcionou a variável nCodigo é igual a 0

IF HNbRec(Paises) = 0 THEN
nNomeArquivo = fOpen(fCurrentDir()+"\Lista_Paises.txt",foRead)
IF nNomeArquivo <> -1 THEN
LOOP
sLinha = fReadLine(nNomeArquivo)
nCodigo = Middle(sLinha,1,4)
IF nCodigo = 0 THEN
BREAK
ELSE
sNome = Upper(NoAccent(Middle(sLinha,5)))
HReadSeekFirst(Paises,Codigo_do_pais,nCodigo)
IF NOT HFound() THEN
HReadSeekFirst(Paises,Nome_do_pais,sNome)
IF NOT HFound() THEN
HReset(Paises)
Paises.Codigo_do_pais = nCodigo
Paises.Nome_do_pais = sNome
HAdd(Paises)
END
END
END
END
END
END


quando fui fazer a importação para a tabela Unidades Federativas tive problemas pois como o campo chave (Uf) é do tipo STRING no final do arquivo a variável não ficava em branco e sim com o valor EOT (debuguei para ver), dai alterei o código e pude incluse fazer a rotina semelhante a que faço no VB6 com o WHILE e sem BREAK, veja abaixo



IF HNbRec(Unidades_federativas) = 0 THEN
nNomeArquivo = fOpen(fCurrentDir()+"\Lista_Uf.txt",foRead)
IF nNomeArquivo <> -1 THEN
sLinha = fReadLine(nNomeArquivo)
WHILE sLinha <> EOT
sCodigo = Upper(NoAccent(Left(sLinha,2)))
HReadSeekFirst(Unidades_federativas,Uf,sCodigo)
IF NOT HFound() THEN
HReset(Unidades_federativas)
Unidades_federativas.Uf = sCodigo
Unidades_federativas.Codigo_da_uf_ibge = Middle(sLinha,3,2)
Unidades_federativas.Aliquota_icms_ufdest= Middle(sLinha,5,2)
HAdd(Unidades_federativas)
END
sLinha = fReadLine(nNomeArquivo)
END
END
END








Nenhum comentário:

Postar um comentário

Teste

Teste
teste