2012-03-14 5 views
0

私のプログラムは、ファイルごとに1行ずつ読み込み中です。しかし、印刷できない文字が見つかった場合(例えば、小数点以下が32未満の文字)、コンソールにエラーメッセージを出力したいだけです。ここで印刷できない文字が検出されたかどうかの検出 - Perl

は私が非印刷可能が私のファイルにどうなるかはわからないと思うので、私は、それが動作している場合、私はわからない

while($line=<FILE>){ 
print $line; 
$line =~ s/^\s+//; #remove leading spaces 
$line =~ s/\s+$//; #remove trailing spaces 
if(/[\x00-\x1F]/){ 
    print "Found a non printable!"; 
} 

を持って何ですか?

これは私の現在の入力ファイルである:

Pa$$word412 
999 

は、キャリッジリターンは非印字可能ではないでしょうか?それでは、私の警告メッセージを印刷してはいけませんか?

ありがとうございます!

+0

関連:http://stackoverflow.com/questions/9317164/detect-whe-perl-string-is-printable – daxim

答えて

1

キャリッジリターンは定義によって印刷できません。あなたはあなたが$lineにラインを読んだが、あなたの試合でこれを参照していません

$line =~ s/\s+$//; #remove trailing spaces 
+1

オハイオ州私はそれを完全に理解していないと思います!私はそれらの行をコメントアウトし、それが動作します。ありがとう! –

2

を言うときには、あなたの入力から改行を削除しています。あなたは、このように明示的に$lineと一致する必要があります:

if ($line =~ /[\x00-\x1F]/) { 

それとも、いっそ、ちょうど$_にあなたのラインを置く:彼らは\sと一致して取り除かれているので

while (<FILE>) { 
    print; 

    s/^\s+//; # remove leading spaces 
    s/\s+$//; # remove trailing spaces 

    if (/[\x00-\x1F]/) { 
     print "WARNING -- Non-printables were found; they have been detected."; 
    } 
} 

末尾の改行は、あなたの警告をトリガしません。あなたの後続のスペースの除去によって。テストケースが必要な場合は、ファイルにタブ文字を入力します。これは[\x00-\x1F]と一致するはずです。

+0

助けてくれてありがとう! –

関連する問題