2011-12-20 10 views
-1

ファイルに出力があります。 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ブロックしかありません。

同様に最初の操作の後、私は最後のブロックを削除し、同じ条件をチェックし、最後に残りのブロックを削除する必要があります。

これを行う効率的な方法を教えてください。

+0

:サブルーチンを想定すると、この目的のために使用することができ、あなたのようなものを使用して逃げるかもしれません。 – Nitesh

+0

@Nitesh - いいえ、私はすべての質問を見てきましたが、回答の投票合計の下にあるチェックマークの形の領域をクリックして回答を受け入れていません。 –

+0

@Karthik:それを行う方法。それは何か投票や他のもののようなものですか?私はupvoteする必要がありますか? – Nitesh

答えて

1

私が正しく理解している場合は、最初にブロックを削除してから削除する必要があることを確認する必要があります。私は受け入れたが、まだそれは私が新しいtostackオーバーフロー午前0を示している

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****** 
関連する問題