0

ハッシュテーブルに読み込んでいる入力ファイルがあります。入力ファイルは次のとおりです

MANAGEMENT=IDL
NORTH=IDL,NORTHERN||VIDL,NORTH||IDL,NORTH
SOUTH=IDL,SOUTHERN||CIDL,SOUTH

ここで、キーごとに、インスタンスなどの別の文字列 (これも文字列です) に NORTH の値が含まれているかどうかを確認する必要があります。

Condition= TRUE if 
$instance contains (IDL AND NORTHERN) OR (VIDL AND NORTH) OR (IDL AND NORTH)

値は、このような OR 条件を多数設定できることに注意してください。

各値を比較する必要がある 15000 のインスタンスがあるため、高速な方法が必要です。

私はチェックできる正規表現を返す関数に値を渡すことを考えていましたが、そのようなことを考えることができませんでした(私はperlの新しい蜂です)

助けやより良い提案に感謝します

4

2 に答える 2

0

私がここに行ったことはほとんどありませんが、私はあなたができると思います:

if ( $instance =~ /(?=.*idl)(?=.*north(?:ern)?/ ) {
    print "$instance\n";
}

上記のコードでは、先読みアサーションを使用しています。つまり、IDL と NORTHERN の両方を含むすべての行に一致します。

于 2013-11-11T07:19:21.687 に答える
0

インデックス用に複数のハッシュ マップを作成できるかもしれません。つまり%IDL、 、%NORTH、および をビルドし%NORTHERNます。これらの各ハッシュ マップには、適切な部分文字列が含まれている場合、文字列が存在します。そうすれば、文字列の評価は次のように$sなります。

$IDL{$s} && $NORTHERN{$s} || $IDL{$s} && $NORTH{$s}

もちろん、この条件は次のように短縮できます。

$IDL{$s} && ($NORTHERN{$s} || $NORTH{$s})
于 2013-11-11T07:03:31.433 に答える