Как динамически сопоставлять данные из файла - PullRequest
0 голосов
/ 20 декабря 2011

У меня вывод в файл. 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******

Я хочу удалить первый блок кода, и я должен проверить, присутствуют ли другие блоки в файле или нет. Также я должен убедиться, что данные блока А не должны присутствовать в файле. Наш файл будет иметь только 2 блока.

Точно так же после первой операции я должен удалить последний блок и проверить те же условия, и, наконец, я должен удалить оставшийся блок.

Скажите, пожалуйста, эффективный способ сделать это.

1 Ответ

1 голос
/ 20 декабря 2011

Если я вас правильно понял, вам нужно сначала убедиться, что вы можете удалить первый блок, а затем удалить его.Предполагая, что подпрограмма может быть использована для этой цели, вы можете использовать что-то вроде:

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******
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...