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+