2016-04-27 5 views
1

私は(How can I print all the lines between the previous and next empty lines when a match is found?)で同様の質問を読んでいます!空行の間にすべての行を印刷しようとしましたが、印刷されません。ここで私が試したスクリプトは、親切に私の要件のために動作するように修正されます。空白行の間に行を印刷するPerlスクリプト

my @file = <IN>; 
for (0 .. $#file) { 
if ($file[$_] =~ /Match/){ 
    my $start = $_; 
    while ($start >= 0 && $file[$start] !~ /^$/) { 
     $start--; # $start points to first empty line 
    } 
    my $end = $_; 
    while ($end <= $#file && $file[$end] !~ /^$/) { 
     $end++; # $end points to next empty line 
    } 
print OUT "\[email protected][$start+1..$end-1]"; #it should print between two empty lines right?? 
} 
} 

入力ファイル:

wire enable,GSMC_G8,mkf_g,un1_G11_0, GND_net_1, VCC, G8, G16, Q_RNIUQAA,  CK_c, reset_c, 
    G0_c, G1_c, G17_c, G2_c, G3_c, G17_c_i, GND_1, VCC_0; 

INBUF G3_pad (.PAD(G3), .Y(G3_c)); 
dff_0_1 DFF_1 (.G17_c(G17_c), .reset_c(reset_c), .CK_c(CK_c), 
    .G0_c(G0_c), .G8(G8)); 
GND GND_i_0 (.Y(GND_1)); 
NOR2 G3_pad_RNIUUQF (.A(G8), .B(G3_c), .Y(G16)); 
INV G17_pad_RNO (.A(G17_c), .Y(G17_c_i)); 
VCC VCC_i (.Y(VCC)); 
CLKBUF CK_pad (.PAD(CK), .Y(CK_c)); 

endmodule 

出力ファイルに必要な:

INBUF G3_pad (.PAD(G3), .Y(G3_c)); 
dff_0_1 DFF_1 (.G17_c(G17_c), .reset_c(reset_c), .CK_c(CK_c), 
    .G0_c(G0_c), .G8(G8)); 
GND GND_i_0 (.Y(GND_1)); 
NOR2 G3_pad_RNIUUQF (.A(G8), .B(G3_c), .Y(G16)); 
INV G17_pad_RNO (.A(G17_c), .Y(G17_c_i)); 
VCC VCC_i (.Y(VCC)); 
CLKBUF CK_pad (.PAD(CK), .Y(CK_c)); 
+1

入力ファイルの例と必要な出力を含めてください。あなたはあなたの質問を編集することができます。 – simbabque

+0

また、 'use strict'と' use warnings'を使ってください。コードにはいくつかの構文上の問題があります。数学演算子は文字列で補間されません。あなたの 'print'ステートメントはあなたが思っていることをしません。 – simbabque

+0

Verilogを解析するには:https://metacpan.org/pod/Verilog-Perl – toolic

答えて

1

flip-flop operatorを使用してください。

#!/usr/bin/perl 
use warnings; 
use strict; 

while (<DATA>) { 
    # Turn flip-flop on at the first empty line 
    # And then off at the next empty line 
    if (/^$/ ... /^$/) { 
    # Ignore the two empty lines 
    next unless /\S/; 
    print; 
    } 
} 

__DATA__ 
wire enable,GSMC_G8,mkf_g,un1_G11_0, GND_net_1, VCC, G8, G16, Q_RNIUQAA,  CK_c, reset_c, 
    G0_c, G1_c, G17_c, G2_c, G3_c, G17_c_i, GND_1, VCC_0; 

INBUF G3_pad (.PAD(G3), .Y(G3_c)); 
dff_0_1 DFF_1 (.G17_c(G17_c), .reset_c(reset_c), .CK_c(CK_c), 
    .G0_c(G0_c), .G8(G8)); 
GND GND_i_0 (.Y(GND_1)); 
NOR2 G3_pad_RNIUUQF (.A(G8), .B(G3_c), .Y(G16)); 
INV G17_pad_RNO (.A(G17_c), .Y(G17_c_i)); 
VCC VCC_i (.Y(VCC)); 
CLKBUF CK_pad (.PAD(CK), .Y(CK_c)); 

endmodule 

私は何が起こっているのかを証明することを容易にするためにここにDATAファイルハンドルを使用しました。それを別のファイルハンドルに交換するのは簡単です。

+0

私は同じことを試みました、それは動作していません....それは空のファイルを出力します... –

+1

"私は同じことを試みた"あなたは何をしましたか? –

+0

私は空の行を指すためにfipflopsを試してみました。 –

関連する問題