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?)

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 !!


tarde demais, mas eu já fiz
user3085082
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.