【问题标题】:Perl: Matching strings by numerical value orPerl:按数值匹配字符串或
【发布时间】:2014-08-18 00:13:16
【问题描述】:

我有一个 tsv 文件,其中包含两列(称为 TG 和 ESP),它们具有数值或为空。 我想过滤文件,只保留值小于 1 或没有值的行。我写了以下while循环:

while (<FILE>) {
    my $line = $_;
    chomp $line;
    my @c = split('\t', $line);
    my $TG = $c[34];
    if ( $TG !~ /\s/ || $TG > 1 ) { next; }
    my $ESP = $c[39];
    if ( $ESP !~ /\s/ || $ESP > 1 ) { next; }
    print "$line\n";

出于某种原因,这些 if 语句导致我的程序跳过文件中的每一行。我希望 if 语句只跳过那些数值大于 1 的行。知道我做错了什么吗?

【问题讨论】:

  • 在整个 while 循环中添加一些打印语句作为跟踪,这样您就可以看到程序在做什么以及它为什么做出某些决定。能够跟踪正在运行的程序是编程的关键技能之一。

标签: regex perl matching


【解决方案1】:

如果这两个字段中的任何一个不包含空格,则您将跳过

$TG !~ /\s/

由于 tsv 文件中没有“null”值,也许您只是想在比较之前检查它们是否为数字?

next if $TG =~ /\d/ && $TG > 1;

【讨论】:

    猜你喜欢
    • 2012-12-30
    • 1970-01-01
    • 2018-05-02
    • 1970-01-01
    • 1970-01-01
    • 2015-09-29
    • 1970-01-01
    • 1970-01-01
    • 2013-06-09
    相关资源
    最近更新 更多