Я Perl Bginner (но я думаю, логика одинакова для всех языков программирования, таких как C++ и C, в моем случае это Perl).

Чего я хочу достичь?

У меня есть текстовый файл, я читаю этот файл, который содержит различное время IP-адреса в каждой строке, и когда я нахожу определенное время, то я удаляю эту строку.

В чем проблема ?

Проблема в том, что когда я открываю файл и проверяю время (чтобы увидеть, что это именно то время, которое я ищу, чтобы удалить эту строку), тогда ему нужно прочитать этот файл (я имею в виду операцию «<»), но когда мне нужно удалить эту конкретную строку после нахождения правильного времени мне нужно сделать операцию записи (я имею в виду эту операцию>). Теперь, когда я пытаюсь добиться этого, я использую этот код (который, безусловно, не будет работать, так как файл открывается в режиме чтения, мы не можем удалить (я имею в виду запись в него)):

 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;

Как удалить эту строку в текстовом файле (после некоторого времени?)

1 ответ1

1

Вы можете использовать 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]

Обратите внимание, что переменная @lines становится магической: каждый элемент массива является строкой из файла, и любые изменения, которые вы вносите в этот элемент, отражаются в файле. Нет системы безопасности, поэтому сначала сделайте резервную копию !

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .