[Cascavel-pm] Apagar nomes em arquivo.

Wendel Scardua wendelscardua em gmail.com
Terça Setembro 4 13:46:34 PDT 2007


Que tal algo assim (como uma solução inicial, mas não-ótima) :

copy($file, $backup);
open( ARQUIVO, '>', "$file" );
open( BACKUP, '<', "$backup" );
while(my $linha = <BACKUP>) {
     chomp $linha;

     if ( ! grep { $linha eq $_ } @nomes ) { # se ( linha não tá na lista de
nomes )
            print ARQUIVO $linha,"\n";
     }
}
close ARQUIVO;
close BACKUP;

Claro, usar grep aqui é feio, mas é só uma solução inicial... o ideal seria
usar first() (List::Util ? ) ou fazer um loop à mão, testando com eq - pra
quê regexp ?.

Ou então o que *eu* faria:

# no começo
my %hash_nomes; @hash_nomes{ @nomes } = (); # automagicamente criar um hash
cujas chaves sejam os nomes.

# no lugar daquele if:
if ( ! exists $hash_nomes{ $linha } ) { # se (existe a chave $linha no hash
de nomes)

Mas fique de olho no fluxo do seu programa: você tava fazendo um loop que
chama o excluir_nomes, e só depois de acabar o loop é que você tava abrindo
os arquivos.

E, o mais importante:
use strict;
use warnings;

[]s

Wendel


On 9/4/07, Rafael Lebrão Martins <rafamv1 em ig.com.br> wrote:
>
> Boa tarde, pessoal. Abaixo está o trecho de um "código" que estou
> escrevendo
> para apagar vários valores em um arquivo de texto. Quando digito os nomes
> que serão removidos e teclo enter, todos os dados do arquivo são apagados.
> Estou utilizando a sub "excluir_nomes" de forma incorreta?!
>
> my $name;
> foreach $name(@nomes) {
> excluir_nomes($name);
> }
> copy($file, $backup);
> open( ARQUIVO, '>', "$file" );
> open( BACKUP, '<', "$backup" );
>
> sub excluir_nomes {
> foreach (<BACKUP>) {
> next if $_ =~ /^$name$/;
> print ARQUIVO $_;
>    }
> }
> close (ARQUIVO);
> close (BACKUP);
>
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: http://mail.pm.org/pipermail/cascavel-pm/attachments/20070904/5c058db8/attachment.html 


Mais detalhes sobre a lista de discussão Cascavel-pm