Problemas ao importar arquivo texto [RESOLVIDO]

1. Problemas ao importar arquivo texto [RESOLVIDO]

Nelson
nelsongesualdi

(usa Debian)

Enviado em 02/02/2012 - 13:32h

Pessoal,

Estou com um problema que já está me pirando.

Tenho um arquivo texto, encoding ISO-8859-1, o qual preciso jogar para dentro de uma tabela no banco. Para simplificar, o arquivo tem 764 posições e criei a tabela da mesma forma. Depois de importar eu separo o que tiver que separar.

Bem, estou trabalhando com "PostgreSQL 8.4.9 on x86_64-pc-linux-gnu, compiled by GCC gcc-4.4.real (Debian 4.4.5-8) 4.4.5, 64-bit".

O problema:

Primeiro não conseguia importar o arquivo, porque o banco estava com encoding UTF8. Tentando com COPY, recebia a mensagem que havia uma sequencia de escape UTF8 inválida numa linha logo no ínicio do arquivo.

Daí usei

file -i <arquivo original>

para descobrir o encoding do arquivo. Descobri que é ISO-8859-1.

Então usei

iconv -fISO-8859-1 -tUTF8 <arquivo original> -o<arquivo convertido>

Seguido de novo COPY (o arquivo tem 15GB). Tudo parecia ir bem, até que na linha 11 milhões e tantos, novamente recebi a mensagem de sequencia UTF8 inválida.

Para resumir a novela, alterei o banco para ASCII, para ISO-8859-1 e fiz tudo de novo duas vezes. Novamente, na mesma linha, o mesmo problema.

Usei o sed para descobrir o que enfim havia de tão bizarro nessa linha e descobri que é simplesmente uma \

O postgre está entendendo que a barra representa uma sequencia de escape. Tentei substituir a barra no arquivo com o sed e não consegui.

Precisarei importar esse arquivo mensalmente. Preciso de uma solução que não seja um gato muito feio. Alguém tem alguma idéia?



  


2. Re: Problemas ao importar arquivo texto [RESOLVIDO]

Raimundo Alves Portela
rai3mb

(usa Outra)

Enviado em 03/02/2012 - 02:37h

Essa barra precisa ser importada ou tanto faz??

poste o comando que esta usando para importar...

Pra retirar a barra de dentro do conteúdo do arquivo, poderia usar por exemplo:

$ cat teste
arquivo/arquivo
$ sed -i '/\//s/\//_/g' teste
$ cat teste
arquivo_arquivo



3. Re: Problemas ao importar arquivo texto [RESOLVIDO]

4. Re: Problemas ao importar arquivo texto [RESOLVIDO]

Nelson
nelsongesualdi

(usa Debian)

Enviado em 03/02/2012 - 09:48h

rai3mb escreveu:

Essa barra precisa ser importada ou tanto faz??

poste o comando que esta usando para importar...

Pra retirar a barra de dentro do conteúdo do arquivo, poderia usar por exemplo:

$ cat teste
arquivo/arquivo
$ sed -i '/\//s/\//_/g' teste
$ cat teste
arquivo_arquivo


A barra não precisa ser importada, posso trocá-la por um espaço. Mas não consegui fazer isso com os seguintes comando sed:
sed 's/\d092/\d020/' AUDITI_SERV_D1112.TXT > TESTE.TXT
sed 's/\\/\\/' AUDITI_SERV_D1112.TXT > TESTE.TXT






Eu tentei com um banco ISO e até com um ASCII. Não adiantou. O problema parece que está no comando COPY, que interpreta a contra-barra (\) como o início de uma sequência de escape e não como um caracter qualquer, não importa qual seja o encoding que se usa.

O que eu preciso mesmo é sumir com essa contra-barra do arquivo. Eu poderia fazer um programa para substituir as barras, mas o problema é que depois não haveria ninguém para dar manutenção nesse programa. Então preferiria uma solução que pudesse ser adotada apenas com comando do SO ou do banco.


5. Re: Problemas ao importar arquivo texto [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 03/02/2012 - 10:14h

Tu já tentou usar o pg_restore?


6. Re: Problemas ao importar arquivo texto [RESOLVIDO]

Luís Fernando C. Cavalheiro
lcavalheiro

(usa Slackware)

Enviado em 03/02/2012 - 10:17h

Tenta usar assim:

$ sed '"s/\/\/"' AUDITI_SERV_D1112.TXT > TESTE.TXT


7. Re: Problemas ao importar arquivo texto [RESOLVIDO]

Nelson
nelsongesualdi

(usa Debian)

Enviado em 03/02/2012 - 11:38h

Consegui substituir. Não perguntem porque, mas assim funciona:

sed 's,\\, ,' AUDITI_SERV_D1112.TXT > TESTE.TXT


Valeu, pessoal.


8. Re: Problemas ao importar arquivo texto [RESOLVIDO]

Raimundo Alves Portela
rai3mb

(usa Outra)

Enviado em 03/02/2012 - 11:43h

Passei um comando que faz isso, vc testou???
trocar / por _ (podes trocar o _ por um espaço em branco)

$ cat teste
arquivo/arquivo
$ sed -i '/\//s/\//_/g' teste
$ cat teste
arquivo_arquivo


9. Re: Problemas ao importar arquivo texto [RESOLVIDO]

Nelson
nelsongesualdi

(usa Debian)

Enviado em 03/02/2012 - 13:10h

rai3mb escreveu:

Passei um comando que faz isso, vc testou???
trocar / por _ (podes trocar o _ por um espaço em branco)

$ cat teste
arquivo/arquivo
$ sed -i '/\//s/\//_/g' teste
$ cat teste
arquivo_arquivo


Testei. Só funcionou quando troquei / por , como delimitador do comando. Porque? Aí eu já não sei. kkkk

Mas valeu, tá tudo resolvido e deu certinho.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts