Página 1 de 1
Ler arquivo TXT
Enviado: 10 Fev 2011 08:26
por PITERGALDIANO
Pessoal, bom dia!
Eu faço a leitura de um arquivo TXT da seguinte forma:
1. Crio um DBF temporário
2. Dou um Append From <arquivo TXT> SDF
Feito isso eu manipulo as informações no DBF.
Porém tem um problema quando a linha desse arquivo TXT tem mais de 256 caracteres, que é o tamanho máximo do campo dentro de um DBF.
Como eu faço para fazer a leitura quando ocorrer da linha do TXT ter mais de 256 caracteres.
Agradeço a atenção de todos.
Obrigado.
Re: Ler arquivo TXT
Enviado: 10 Fev 2011 08:59
por Maligno
O ideal é usar as funções de manipulação de arquivos FOpen(), FRead(), etc.
Re: Ler arquivo TXT
Enviado: 10 Fev 2011 09:33
por Dudu_XBase
Bom Dia...
Somente para complementar a resposta do mestre Maligno...
Código: Selecionar todos
#include "Fileio.ch" // colocar no inicio do prg..
cLinha := space (F_BLOCK)
cArquivo := "dudu.txt"
nHandle := fopen (cArquivo, FO_READ)
while ( fread (nHandle, @cLinha, F_BLOCK) > 0 )
// Exemplo Gravando em Tabela conteudo de arquivo Texto
arq_fun->(dbappend ())
replace arq_fun->NOME with substr (cLinha, 7,16) // pega da var cLinha a posicao que preciso...
replace arq_fun->ENDERECO with substr (cLinha, 17,46)
enddo
fclose (nHandle)
Ler arquivo TXT
Enviado: 10 Fev 2011 10:29
por Pablo César
Para pegar a linha completa do arquivo é aconselhável fazer uma função que pegue linha a linha utilizando-se da busca CRLF ou seja chr(13)+chr(10). O exemplo a seguir mantém o mesmo exemplo citado pelo colega acima (para os campos: nome e endereço), mas estes de mais nada, os dados no arquivo texto deverão estar sempre na posição fixa e não variável. Caso contrário deverá ser estudado Nesse caso anexo o arquivo TXT) para saber se tem algum delimiter ou algo que dê para identificar que em tal posição começa o nome e o endereço (por exemplo). Essa verificação também terá que ser feito linha a linha, podendo estar na mesma função de desdobramento de linha.
Segue exemplo como como base:
Código: Selecionar todos
#include "fileio.ch"
#include "common.ch"
#define LINEBUFF 1024
#define CRLF CHR(13)+CHR(10)
// Criando arquivo texto para exemplo
cTexto:=" 10ANTONIO PINTO CAMARGO 19560127R. BARAO DO AMAZONAS N. 1575 VILA RU 1575 VILA RUTE 422-737432"+CRLF+;
"1876ANTONIO BULATI 19401010ILDEFONSO MUNHOZ DA ROCHA N.605 PAN.605 PALMITAL 423-198fadsfdsa"+CRLF+;
" 18AGUINALDO VELOSO DA CRUZ 19701231MANECO VIANA DENTRO DO COLEGIO ROQUROQUE VERNALHA. 425-511dsafdssdfafd"+CRLF+;
" 25PAULO ADRIANO MORITA 19750810ROQUE VERNALHA N.925 VILA PARANAGUA VILA PARANAGUA 422-697fffds"+CRLF+;
" 31MARCELLY ABALEM BAKA 19790615TRAVESSA PROF.FRANCISCO GAMA E SILVAGAMA E SILVA 67 422-287dsfgds gfdgdfs"+CRLF+;
" 33MARCO ANTONIO BERLIM 19610724MANOEL CORREIA 831 OEL CORREIA 831 422-157gfdgf fdsggs"+CRLF+;
" 34FRANK RODRIGUES DA SILVA 19751205AV. DR. ROQUE VERNALHA N.1195 V. CRU195 V. CRUZEIRO gfdgdsfg df"+CRLF+;
" 36JOSE FERNANDO DE SOUZA 19650630CONJ. LARANJEIRA APTO.023 BL.02 APTO.023 BL.02 422-894"+CRLF+;
" 37ANDRE MONTEIRO GARCIA 19750111R. K 27 JD. SANTOS DUMONT . SANTOS DUMONT 423-951 gsdfgds"+CRLF+;
" 38LUIZ CARLOS BARIDOTTI 19570207R. CORONEL ELISIO PEREIRA BL.G APTO CJ. RIO BRANCO 423-210 f"+CRLF+;
" 39GLAUCIA RAMOS PEREIRA RODRIGUES 19720317R. CONSELHEIRO CORREIA N.2306 JD. AL06 JD. ALVORADA 423-321 d"+CRLF+;
" 40IONE MARI SATO 19620703R. GASTAO SOARES GOMES N.801 PORTO DORTO DOS PADRES 422-828 fdsg"+CRLF+;
" 53OSMAIL TADEU COSTA DE OLIVEIRA 19540523R. FLAMBOIAM 542 JD SAMAMBAIA 2 JD SAMAMBAIA 423-729"+CRLF+;
" 57MAURICIO ANTUNES DOS SANTOS 19780120JD ALVORADA JD ALVORADA 422-508 gsdf"+CRLF+;
" 58UBIRATAN CEZAR DA SILVA 19740815ESTRADA V.DOS CORREIAS NR 21 - JD EL1 - JD ELDORADO 423-560 gfgd"+CRLF+;
" 59AMADO ANTONIO D AGOSTINI 19540902 422-408 dgs"+CRLF+;
" 61NILSON MENDES JUNIOR 19640101R. ALIPIO DOS SANTOS 1469 BOCKMAN 1469 BOCKMAN 422-603 dsf"+CRLF+;
" 63ADILSON FERREIRA DA SILVA 19671125R. ILDEFONSO MUNHOZ DA ROCHA NR 10922 - JD ALVORADA 422-252 fds"+CRLF+;
" 64RICARDO FRANCELINO PINTO 19640919R. BALDUINA ANDRADE N.35 VILA HORIZO VILA HORIZONTE 425-268"+CRLF+;
" 65CARLOS ALBERTO FALAVINE 19391007R. ANTONIO PEREIRA N.2910 VILA PARAN VILA PARANAGUA 422-202 dfsgsg"
//+chr(26) // chr(26) representa final de arquivo
MEMOWRIT("clients.txt",cTexto)
// Criando dbf exemplo
CAMPOS:={ {"NOME" , "C",036,000},;
{"ENDERECO" , "C",035,000} }
DBCREATE("CLIENTS.DBF",CAMPOS)
use clients
EXTRAI("clients.txt")
FUNCTION EXTRAI(cArquivo)
local cLinha
private lEof:= .f.
nArquivo:=fopen(cArquivo,0)
if nArquivo # -1
do while !lEof
cLinha := LinhaArq(nArquivo,LINEBUFF)
if len(alltrim(cLinha))>3
clients->(dbappend ())
replace clients->NOME with substr (cLinha, 05,36) // pega da var cLinha a posicao que preciso...
replace clients->ENDERECO with substr (cLinha, 49,36)
endif
enddo
endif
RETURN nil
STATIC FUNCTION LinhaArq(nHandle,nBuffSize)
LOCAL cRet:= cBuff:='', nPos:= nEol:= nRead:=0
DEFAULT nBuffSize TO 1024
cBuff:=SPACE(nBuffSize)
nPos:=FSEEK(nHandle,0,FS_RELATIVE)
IF ( nRead:=FREAD(nHandle,@cBuff,nBuffSize) ) > 0
IF ( nEol:=AT(CRLF,SUBSTR(cBuff,1,nRead)) ) == 0
cRet:=SUBSTR(cBuff,1,LEN(cBuff)-1)
ELSE
cRet:=SUBSTR(cBuff,1,nEol-1)
FSEEK(nHandle,nPos+nEol+1,FS_SET)
END
ELSE
lEof:=.t.
END
RETURN(cRet)
É só compilar e observar o exemplo dos arquivos clients.txt e clients.dbf que froam criados aqui para exemplificação.
OFF TOPIC: Ahhh agora que percebí... Retornou o avatar original do Maligno, essa é bem melhor... rsrs
Re: Ler arquivo TXT
Enviado: 11 Fev 2011 07:11
por PITERGALDIANO
Pessoal, bom dia!
Consegui fazer a leitura do arquivo pelo FOpen e FRead, porém quando informo a varíavel que vai armazenar os dados na função FRead, ela faz a leitura do primeiro caractar da primeira linha até o último caracter da última linha.
a pergunta é: Se eu quiser fazer a leitura somente da linha número 10? é possível?
Obrigado.
Re: Ler arquivo TXT
Enviado: 11 Fev 2011 09:15
por Pablo César
a pergunta é: Se eu quiser fazer a leitura somente da linha número 10? é possível?
Com certeza ! Você testou e leu o exemplo que eu dei ??
Ler arquivo TXT
Enviado: 06 Dez 2012 10:11
por AndersonR
Pablo,
testei a sua função, porém ela "engole" um caracter ao final da linha, e não estou conseguindo solução.
Você tem como me dar uma dica ?
Ler arquivo TXT
Enviado: 06 Dez 2012 13:36
por Pablo César
Falta um caracter no final da linha, onde ? Na variavel clinha ? Ou no replace de endereço ? A estrutura do dbf é igual (senão for list a estrutura e de ser possivel parte do seu código.
Poderia, colocar também parte do seu texto ?