2016-03-18 8 views
0

私はうまく動作するスクリプトを持っていますが、私が抱えている問題は、マッチしたすべての単語を組み合わせてスペーシングを削除していることです。誰かが私に何があるか教えてもらえれば、またはスクリプトが試合中の単語を組み合わせないようにするために行方不明になっている。Perlスクリプトがスペースを削除しています

use strict; 

my $find = '^M0|MT'; 
my $match = 0; 

open (NEW, ">", "Output.txt") or die "could not open:$!"; 
open (FILE, "<", "File.txt") or die "could not open:$!"; 

while (<FILE>) { 
    chomp; 

if ($match){ 
    $match = 0; 
    s/\s+//g; 
    print NEW "$_\n"; 
} 

if (/$find/){ 
    $match = 1; 
    print NEW "$_" 
} 
} 
close (FILE); 
close (NEW); 

ファイルの例

  U# mul acc  UNIT # HAS MULTIPLE ACCOUNTS   FAIL 

出力例(現在、私のスクリプトで何が起こっている)

  U#mulaccUNIT#HASMULTIPLEACCOUNTSFAIL 
+1

's/\ s + // g;'行で何をしようとしていますか? – ThisSuitIsBlackNot

+0

あなたが提供したコードは、サンプル入力に対して行った出力を生成しません。空のファイルが生成されます。その理由は、サンプルのFile.txtには存在しない '^ M0 | MT'を探しているからです。その正規表現に一致するようにサンプルファイルを変更しても、あなたが要求する出力は生成されません。代わりに、元の行は、改行が不足しているOutput.txtファイルに格納されます。 – bart

+0

プライベートな情報のため、最初の行を削除しました。申し訳ありませんが、私は一般的な行を追加する必要があります。 my(/ $ find /)では、printをNEWに設定するには、文字が行の最初の列と一致する場合のみNEWを出力します。 @bart – PhoenixJay

答えて

1

@ThisSuitIsBlackNotはすでにに指摘したように:

ライン

s/\s+//g; 

あなたのスペースを食べていますか? 1つまたは複数のスペースのシーケンスを何も指定しないで置き換え、完全な入力文字列を繰り返す。そう

s/\s+/ /g; 

を、単に1つのスペースでスペースのシーケンスを置き換える:あなたが言うことを意図したように

が見えます。

+0

ありがとう! @ThisSuitIsBlackいいえ、私はそれが私の人生のためにそれを理解することができなかった単純なものであることを知っていた。私はPERLには非常に新しいので、私はゆっくりと言語を学んでいます。 – PhoenixJay

関連する問題