Como excluir uma linha específica em um arquivo de texto após alguma operação no 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, o 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 uma determinada hora, então eu excluir essa linha.

Qual é o problema ?

O problema é quando eu abro um arquivo e verifico a hora (para ver que é este o momento especial que estou procurando para excluir esta linha), então ele precisa ler esse arquivo (quero dizer '& lt;' operação), mas quando eu tenho para excluir essa linha em particular depois de descobrir que a hora correta eu preciso fazer a operação de gravação (quero dizer, esta operação '& gt;'). Agora, quando eu tento conseguir isso eu uso esse 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 (após alguma manipulação do tempo?)

user3085082
fonte

Respostas:

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]

Note que a variável @lines torna-se mágico: 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 faça um backup primeiro !!

Joseph R.
fonte
tarde demais, mas eu já fiz
user3085082