2012-03-14 27 views
0

我的程序正在逐行讀取文件。但是如果找到一個不可打印的字符(例如十進制小於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-whether-perl-string-is-printable – daxim 2012-03-14 18:19:57

回答

1

根據您的定義,回車是不可打印的;但是當你說

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

哦,我想我並沒有完全理解這一點!我評論了這些線條,然後它就起作用了。謝謝! – 2012-03-14 17:08:17

2

您正在閱讀的行成$line,但是,你的對手不是引用這個要刪除您輸入回車。您需要明確匹配$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

感謝您的幫助! – 2012-03-14 17:09:04