Como deletar uma linha em particular em um arquivo de texto após alguma operação naquele arquivo de texto ao mesmo tempo

0

Eu sou perl bginner (mas eu acho que a lógica é a mesma para todas as linguagens de programação como C ++ e C no meu caso perl).

O que eu quero alcançar?

Eu tenho um arquivo de texto que eu li esse arquivo que contém diferentes IPaddress Time em cada linha e quando eu encontrar um determinado tempo, então eu excluir essa linha.

Qual é o problema?

O problema é quando eu abro um arquivo e verifico a hora (para ver se é esse o momento especial que estou procurando para excluir esta linha), então ele precisa ler esse arquivo (quero dizer '<' operação), mas Quando eu tenho que excluir essa linha em particular depois de encontrar o tempo correto que eu preciso fazer a operação de gravação (quero dizer, esta operação '>'). Agora, quando eu tento conseguir isso eu uso este código (o que certamente não funcionará como o arquivo é aberto no modo de leitura, não podemos excluir (eu quero dizer escrever para ele)):

 open my $fhi, '<', 'C:\shekhar_Axestrack_Intern\WindowCreation\ListOfIpAdress.txt', or die "Could not open file $!";
    while (my $line = <$fhi>) 
    {   
       ## Doing some operation using $fhi in read mode
        if($Time >'33')
        { 
          $fhi->autoflush; #flush the line if time is greater than 33 hours, whereas all other lines which do not folow the condition are still present in file.
        }
    }
    close $fhi;

Como excluir essa linha em particular no arquivo de texto (depois de algum tempo de manipulação?)

    
por user3085082 18.01.2015 / 04:08

1 resposta

1

Você pode usar Tie::File :

tie @lines,'Tie::File','C:\...';
for $line (@lines){
    # Do some operation on $line
    # Test if you need to delete the line
    push @to_delete, $i++ if $need_to_delete;
}
delete @lines[@to_delete]

Observe que a variável @lines se torna mágica: cada elemento da matriz é uma linha do arquivo e todas as alterações feitas nesse elemento são refletidas no arquivo. Nenhuma rede de segurança, portanto, faça um backup primeiro !!

    
por 20.01.2015 / 04:23