[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