如何在对文本文件进行某些操作后同时删除文本文件中的特定行

如何在对文本文件进行某些操作后同时删除文本文件中的特定行

我是 perl 初学者(但我猜想所有编程语言的逻辑都是相同的,比如 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

您可以使用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变得神奇:数组的每个元素都是文件中的一行,并且对该元素所做的任何更改都会反映在文件中。没有安全网,所以首先进行备份!!

相关内容