【问题标题】:Detecting if a non-printable character has been found - Perl检测是否找到了不可打印的字符 - Perl
【发布时间】:2012-03-15 02:10:53
【问题描述】:

我的程序正在逐行读取文件。但是如果发现一个不可打印的字符(例如十进制值小于 32 的字符),那么我只想向控制台输出一条错误消息。

这就是我所拥有的

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

回车不是不可打印的吗?那么不应该打印我的警告信息吗?

谢谢!

【问题讨论】:

标签: perl file character


【解决方案1】:

您正在将这一行读入$line,但没有在您的比赛中引用它。您需要像这样明确匹配$line

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

或者,更好的是,只需将您的线路输入$_

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.";
    }
}

尾随换行符不会触发您的警告,因为它们与 \s 匹配,并且会因您删除尾随空格而被剥离。如果你想要一个测试用例,在你的文件中放一个制表符;这应该匹配[\x00-\x1F]

【讨论】:

    【解决方案2】:

    根据您的定义,回车是不可打印的;但是当您说

    时,您正在从输入中删除回车符
    $line =~ s/\s+$//; #remove trailing spaces
    

    【讨论】:

    • 哦,我想我没有完全理解这一点!我将这些行注释掉了,然后它就起作用了。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2010-12-13
    • 1970-01-01
    • 2012-11-09
    • 2011-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多