2

while ループを使用して、入力ファイルから配列に実数を割り当てています。入力ファイルは、配列の最初の 21 ポイントが空白になるように設定されています。数値 21 は、入力ファイル内の「Range1」というフレーズを含む行番号から 1 を引いたものに対応します。

splice @range_min, 0, $header_lines-1;

これらの空白行を配列から削除します。

別の行にそのフレーズを含む他の入力ファイルが存在する可能性があるため、 $header_lines をそのフレーズを含む行番号と等しくする必要があります。

次のコマンドをwhileループに入れようとしました:

$header_lines = $., last if /Range1/;

これは機能しますが、配列を完全にクリアします(プログラムの目的を無効にします)。

while ループや配列に影響を与えずに、入力ファイル内のフレーズの行番号を見つけるより良い方法はありますか?

4

1 に答える 1

2

代わりにこれをループに入れてみてください:

    if ( /Range1/ ) {
        $header_lines = $.;
    }

現在起こっていることは、ループのたびに $header_lines を現在の行番号 ($.) に設定していることだと思います。コード「last if /Range1/;」$_ が Range1 と一致すると、ループを終了します。したがって、最初の 21 行だけを設定して終了し、すべての行を消去します。

于 2013-07-09T20:10:24.233 に答える