如何从文件动态匹配数据

时间:2011-12-20 08:47:46

标签: perl

我在文件中有输出。我有3块输出。文件中的数据是

*******Block A********
iSCSI_Storage=0
User=Admin
IP=15.178.209.111

*****end of block A******

*******Block B********
iSCSI_Storage=1
User=Admin_1
IP=15.178.209.111

*****end of block B******

*******Block C********
iSCSI_Storage=2
User=Admin_2
IP=15.178.209.111

*****end of block C******

我想删除代码的第一个块,我必须检查文件中是否存在其他块。此外,我必须确保块A的数据不应出现在文件中。我们的文件现在只有2个块。

同样在第一次操作后,我必须删除最后一个块并检查相同的条件,最后我必须删除剩余的块。

请告诉我有效的方法。

1 个答案:

答案 0 :(得分:1)

如果我理解正确,您需要先验证是否可以删除第一个块,然后将其删除。假设子程序可用于此目的,您可能会使用以下内容:

use strict;
use warnings;

my @blocks;
my $block = "";
while (<DATA>) {
    if (/^\Q*******\E/ .. /^\Q*****end of\E/) {
        $block .= $_;
        if (/^\Q*****end of\E/) {
            push @blocks, $block;
            $block = "";
        }
    }
}
my $data = shift @blocks;
print $data if verify_block($data);
print @blocks;

sub verify_block {
    ... # enter code here
}
__DATA__
*******Block A********
iSCSI_Storage=0
User=Admin
IP=15.178.209.111

*****end of block A******

*******Block B********
iSCSI_Storage=1
User=Admin_1
IP=15.178.209.111

*****end of block B******

*******Block C********
iSCSI_Storage=2
User=Admin_2
IP=15.178.209.111

*****end of block C******