2017-06-21 4 views
1

以下のコードから、正規表現の結果変数の内容(つまり、$ fhの結果を新しいファイル名に格納)を保存します。どうしたらいいですか?perlを使って正規表現変数の結果を新しいファイルに書き込むには?

regexの変数出力(つまり、$fh出力)を新しいファイルに書き込む方法はありますか?

use strict; 
use warnings; 
open my $fh,'<',"open.txt" or die "$!"; 
while(<$fh>) 
    { 
    $fh=s/("\d+|\d+|")\s*/$1/g; 
    print $fh; 
    } 
close $fh; 

エラー:

readline() on unopened filehandle 1 at fr.pl line 7. 
close() on unopened filehandle 1 at fr.pl line 9. 

Open.txt

1 
2 
3 
radio 
vendor 
version114 
version115 

出力:

注: $ FHは正規表現を持っているvalues.Nowこれら は、ここに私のコードです$ fhの値は新しいファイルに保存し、bと同じ内容を出力する必要がありますelow。

radio 
vendor 
version 
version 
+1

あなたの質問を編集し、入力と出力の例を含めてください。何をしたいですか?あなたの正規表現は奇妙です。 \ d + 'または' \ d + 'または' ''(一重引用符)を取得しています。オプションの空白があり、そのすべてをキャプチャに置き換えます。あなたは '$ word'を変更された行にするか、キャプチャグループ内のものにしますか? – simbabque

+2

明確な構文エラーを修正するには(構文の強調表示が非常に明確になっています)、[編集する](https://stackoverflow.com/posts/44674653/edit)してください。インデントも。あなたのコードを読んで理解できるようにするためには、できるだけ簡単にできるようにしてください。 –

+0

構文エラーが修正され、インデントが追加されました。 @DaveCross –

答えて

2

あなたがしようとしていることは完全にはわかりません。しかし、私は何があなたのエラーを生成しているかを見ることができます。

$fh=s/("\d+|\d+|")\s*/$1/g; 

あなたはこのコード行を実行する前に、$fhはあなたからデータを読んでいるファイルハンドルが含まれています。問題は、このラインです。しかし、このコード行では、その値を置換後の結果で上書きします。これは、置換の数(整数)または空の文字列(置換に失敗した場合)のいずれかになります。どちらの場合も、$fhにファイルハンドルが含まれなくなります。

ループの最初の繰り返しの最後に、$fhにはファイルハンドルが含まれなくなりました。したがって、2番目の反復の開始時にwhile (<$fh>)を実行すると、それは失敗します(エラーが示すように、$fhは開いているファイルハンドルではありません)。その読み込みは失敗し、ループはスキップされます。実行される次の行は、close()です。そしてそれはまったく同じ理由で失敗します。

私はあなたがそのコード行が何をしていると思いますか全く分かりません。しかし、それは、実際はあなたのプログラムを壊しているやって何:-)

アップデート:私は読むこと(そして、もっと重要なのは、理解)はPerlのFAQ How do I change, delete, or insert a line in a file, or append to the beginning of a file?は、この時点で、あなたの時間の非常に有益な使用になると思われる 。基本的なファイル操作の仕組みがわからないようです。

+0

私はその正規表現を使用してファイルからすべての桁を削除したいと思っています。桁を削除した後、出力は新しいファイル名で書き込まれます。 @Dave Cross –

+1

@ salar33:Ok。そして、あなたのファイルハンドルを上書きすることは、それを達成する良い方法だと、なぜあなたは思いますか? –

+0

私はOPがファイルの読み方を誤解していると思います。 – simbabque

関連する問題