[FUGSPBR] 1/2 OFF: perl & arquivos de texto

Jorge Godoy godoy em metalab.unc.edu
Qua Jul 23 08:57:42 BRT 2003


"Cleiton L. Siqueira" <cleiton em websystem.com.br> writes:

> ----------- Inicio Codigo --------------
> #!/usr/bin/perl
>
> use Pg;
> $conn = Pg::connectd "dbname=teste");
> $TABLE = 'Coloque aqui o nome de sua tabela';
>
> open(FILE, "/var/log/radacct/default/detail");

Como você sabe que o arquivo foi aberto? Você não está
checando. *SEMPRE* cheque o resultado de uma operação de abertura de
arquivos, gravação de dados, etc. Não há garantia que ela funcionará
em 100% dos casos.

Aqui podes fazer:

open(FILE, "/var/log/radacct/default/detail") or die "Can't open file: $!\n";

Assim você saberá o motivo do erro, se houver erro. 

> @linhas = <FILE>;

Isso é um problema: todo o arquivo será jogado na memória neste
instante. Se você não tiver muita memória... 

> close(FILE);
>
> foreach $linha (@linhas) {

Elimine as duas linhas anteriores a esta e mude esta para:

foreach $linha (<FILE>) {

> @dados = split(/ /,$linha); # Utilize o delimitador de acordo com seu arquivo
> $conn->exec("INSERT INTO $TABLE values
> ($dados[0],$dados[1],$dados[2],$dados[3],.... etc e tal);");
>
> }

Podes adicionar o 'close(FILE);' aqui, mas o Perl se encarregará de
fechar o arquivo no término do programa. 

> ----------- Fim Codigo --------------
>
> Eu uso mais ou menos assim, só que utilizo Banco de Dados PostgreSQL.
> Acredito que não deve mudar muita coisa.
>
> Trato arquivos bem grandes e funciona normalmente!

Você deve ter muita memória disponível ou arquivos menores que os dele
ou não está tendo problemas na abertura dos arquivos ou... Bem, não há
checagens de erro no programa acima, então pode ser bastante coisa.
:-) 


Sds,
-- 
Godoy.    <godoy em metalab.unc.edu>
_______________________________________________________________
Sair da Lista: http://www2.fugspbr.org/mailman/listinfo/fugspbr
Historico: http://www4.fugspbr.org/lista/html/FUG-BR/



Mais detalhes sobre a lista de discussão freebsd