0

Perlのファイル内の特定の文字セットを置き換えようとしていますが、機能していないようです。これが私のコードです。

my $file = shift;
open(FILE, "$file") or die "File not found";
while (<FILE>){
   $data .=$_
}
$data =~ s/[^A-CEGHJ-PR-TW-Z]{1}[A-CEGHJ-NPR-TW-Z]{1}\s?[0-9]{2}\s?[0-9]{2}\s[0-9]{2}\s?[A-DEM]{0,1}$/XX012345X/g;

パターンマッチングが文字のセットを見つけるために機能することは知っていますが、置換が機能するかどうかは完全にはわかりません。しかし、私の主な関心事はPerlコードです。ファイルを実行した後も、ファイルは変更されません。

サンプルファイル。

AB123456C Ab12345678 DG657465 GH123456FG
4

2 に答える 2

2

あなたがそれを指示しないので、コードはファイルを変更しません。書き込みではなく読み取りのためにファイルを開き、さらに何も印刷しません。

これをすばやく処理する方法が必要な場合は、正規表現の置換をファイルに入れて、ソースファイルとして使用するだけです。このような:

regex.plの内容:

s/[^A-CEGHJ-PR-TW-Z]{1}[A-CEGHJ-NPR-TW-Z]{1}\s?[0-9]{2}\s?[0-9]{2}\s[0-9]{2}\s?[A-DEM]{0,1}$/XX012345X/g;

一発ギャグ:

perl -p regex.pl inputfile.txt > output.txt

このようにして、出力をすばやく確認できます。ポケットベルコマンドにパイプすることも、まったくパイプしないこともできます。

于 2013-01-29T11:00:53.673 に答える
0

開いているファイルは読み取り専用です。したがって、$ data変数を書き込む一時的な2番目のファイル( File :: Temp )を開き、それを閉じ、最初のファイルを削除して(リンクを解除)、一時ファイルの名前を目的の名前に変更する必要があります。

このSOの質問が役立つ場合があります。

トピック外の注意:ファイルを処理するには、最新のPerlアプローチを使用してください。例えば:

open my $fh, "<", $filename or die "Cannot open file $filename"

このSOの質問も参照してください。package-globaltypeglobファイルハンドルの使用は避けてください。

于 2013-01-29T10:59:34.243 に答える