[Cascavel-pm] Apagar nomes em arquivo.

Rafael Lebrão Martins rafamv1 em ig.com.br
Terça Setembro 4 13:53:31 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 = ) { 
> 
> 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 } = (); # automa g icamente 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 ( ) { 
>next if $_ =~ /^$name$/; 
>print ARQUIVO $_; 
> } 
>} 
>close (ARQUIVO); 
>close (BACKUP); 
> 

Estou usando o "strict" e o "warnings", é porque coloquei apenas um pedaço 
do "código"... Obrigado pelas dicas.. 
Vou precisar sair, mas assim que chegar, eu posto o resultado na lista! 
Grato... 




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