[Cascavel-pm] otimização em manipulação de texto
Nelson Ferraz
nferraz em gmail.com
Terça Dezembro 4 09:56:28 PST 2007
> Basicamente, abro o arquivo, coloco o conteúdo numa
> array através do operador diamante, pesquiso
> linha-a-linha o meu fenômeno. Quando encontrado,
> modifico-o, volto a salvar em disco e inicio tudo
> novamente.
Se você estiver lidando com arquivos grandes, é melhor fazer as
substituições linha a linha, ou parágrafo a parágrafo, do que
carregá-lo inteiro na memória.
Isto é:
while ( my $line = <> ) {
# do something with $line
}
> Bem, Perl é uma ótima linguagem, principalmente, para
> mim, por eu não precisar declarar todas as variáveis,
> mas Perl não deve ser à prova de estupidez, e acho que
> meu código está um pouquinho estúpido.
Você pode começar a torná-lo mais inteligente, se abrir mão do "não
precisar declarar todas as variáveis".
Ou seja: inclua um "use strict" e um "use warnings" no começo do seu programa.
É bem provável que, quando você fizer isso, seu programa comece a
apresentar mensagens de erro. É para isso que estas diretivas servem,
para apontar os problemas, de forma que você possa corrigi-los.
Portanto, comece os seus programas com:
#!/usr/bin/perl
use strict;
use warnings;
while ( my $line = <> ) {
# ...
}
> Gostaria de saber a melhor forma de otimizá-lo.
> Acredito que um caminho seria fazer todas as
> alterações e salvar em disco apenas no final. Porém,
> meus dados, eventualemnte, podem chegar a 500 Mb e
> centenas de arquivos plain text, ou MUITO mais. Há
> alguma forma "perlniana" de automatizar o fluxo
> memória/disco para fins de otimização? Algo que
> monitore a quantidade de memória necessária e decida
> onde os dados serão armazenados. Ou nada disto é
> necessário?
Na minha opinião, é melhor lidar com pedaços menores de texto, ao
invés de tentar colocar tudo na memória de uma vez.
Se você nos contar que tipo de dados está lidando -- ou melhor ainda.
se puder nos fornecer um exemplo -- talvez possamos ajudá-lo melhor.
[]s
Nelson
Mais detalhes sobre a lista de discussão Cascavel-pm