Página 1 de 1
Carregar arquivo texto
Enviado: 16 Ago 2007 12:46
por MarceloHenrique
Tenho que carregar um arquivo texto delimitado com ;
Exermplo do conteudo do arquivo a ser importado (arq.txt):
2007-08-15 00:00:54;1187146854;000:00:18;201.163.222.74;0
Não funciona o comando append from arq.txt delimited with ";" - tenho um banco com os campos criados como caractere e apenas a primeira parte é importada com o campo acima - depois do primeiro ; nada é importado.
O que estou fazendo hoje é ler o arquivo texto com fread() e demais comandos, e depois gravando no dbf, mas fica muito lento pelo arquivo texto ser grande (cada linha é bem maior que a mostrada no exemplo)
Conto com a ajuda de vocês.
Obrigado,
Marcelo Henrique
Enviado: 16 Ago 2007 13:22
por Ademir
Boa tarde !
Se não estou enganado, para se converter desta forma cada campo caracter tem que estar separado por aspas.
Enviado: 20 Ago 2007 08:17
por MarceloHenrique
Neste arquivo os campos caracteres não estão vindo com aspas e a separação está sendo feita com ; por isto não estou conseguindo usar o append from. Por isto ainda não consegui achar uma solução.
Enviado: 20 Ago 2007 11:57
por gvc
Nos testes com o DBU, só funcionou o append from <arquivo.txt> delimited quando os campos estão entre aspas e separados por virgula.
Se não puder converter assim, uma saida é importar todo o arquivo para um dbf em que cada registro, com um só campo, contem uma linha do arquivo.
Após a importação, rode um loop do inicio ao fim do arquivo, desmontando cada linha, conforme suas regras.
Enviado: 20 Ago 2007 12:36
por Ademir
Bom dia a todos !
Marcelo, já tentou usar: APPEND FROM <ARQUIVO.TXT> SDF ?
Crie os campos do DBF de acordo com o TXT, criando um campo Caracter para cada ponto e virgula tambem. Acho que assim deve funcionar.
por exemplo:
2007-08-15 00:00:54;1187146854;000:00:18;201.163.222.74;0
a estrutura do DBF ficaria assim:
CAMPO1 C 19
CAMPO2 C 1
CAMPO3 C 10
CAMPO4 C 1
CAMPO5 C 9
CAMPO6 C 1
CAMPO7 C 14
CAMPO8 C 1
CAMPO9 C 1
Enviado: 20 Ago 2007 15:06
por MarceloHenrique
1) gvc: Importei apenas como um único campo e deu certo. Diminui o tempo em mais ou menos 70%
2) Ademir: Opção SDF - não posso usar esta opção por que os campos podem ter tamanhos variados e alguns campos virem preenchidos algumas vezes e em outras virem vazios. Não tem tamanho fixo.
Obrigado pelas dicas.
Marcelo Henrique
Enviado: 22 Ago 2007 12:35
por diogenes_varela
os campos podem ter tamanhos variados e alguns campos virem preenchidos algumas vezes e em outras virem vazios. Não tem tamanho fixo.
Mesmo os campos vazios teriam dois delimitadores (;) seguidos indicando um campo vazio, não está assim?
Re: Carregar arquivo texto
Enviado: 18 Jul 2008 19:42
por JLF
Procurei aqui no Fórum e não encontrei a solução para este problema que o amigo tinha em 2007.
Não existe mesmo uma maneira simples de se "importar" um TXT com delimitadores ?
Poxa seria tão simples um comando assim APPEND FROM texto.csv DELIMITED with ";" principalmente quando se tem muitos campos
Re: Carregar arquivo texto
Enviado: 18 Jul 2008 20:33
por ANDRIL
Realmente parece que a clausula " DELIMITED with " do APPEND FROM não serve pra nada. O jeito é vc fazer uma rotina para ler o arquivo ( muito dificil visto que nao tem campo de tamanho certo) e outra é vc abrir o arquivo e com STRTRAN() substituir todos ";" por ","
Ate+
Re: Carregar arquivo texto
Enviado: 18 Jul 2008 20:39
por JLF
Andril,
Em que me ajudaria trocar os ";" por "," porque isso é facil, eu edito o arquivo em notpad mesmo e mando substituir.
Re: Carregar arquivo texto
Enviado: 18 Jul 2008 21:08
por ANDRIL
Nos testes com o DBU, só funcionou o append from <arquivo.txt> delimited quando os campos estão entre aspas e separados por virgula.
Fiz um teste aqui e com campos caracteres sem aspas e delimitados por "," e funcionou normalmente:
use arquivo.dbf
append from arquivo.txt delimited
Todos os campos foram preenchidos como o esperado. Por isso, indiquei a substituição do ";" por ",", pelo menos foi assim que entendi a colocação do colega que abriu o tópico, caso nao seja, desconsiderar.
Ate+