首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Perl -如何在.tsv文件中解析空值

Perl -如何在.tsv文件中解析空值
EN

Stack Overflow用户
提问于 2014-10-15 19:09:42
回答 1查看 954关注 0票数 0

我使用Perl来解析Excel电子表格,我已经将它转换为一个标签分隔的文本文件。我想要编写一个if循环,它依赖于某个列中存在一个值,但是null值会导致我的代码失败。

以下是tsv文件的样子:

代码语言:javascript
复制
Patient No.     Date      Freezer   Location        Description     Frozen @ Passage
PT101           12/29/09  F1,-130   P-3,68          SERUM                                   
PT101           2/16/10   F1,-130   Q-9,62          Omentum         4                                       
PT101           2/16/10   F1,-130   Q-9,63          Omentum         4                                       
PT101                     F1,-130   O-3,8           L Ovary Tumor                                   

注意,有些行有空单元格。

下面是代码:

代码语言:javascript
复制
#!/usr/bin/perl
use strict;
use warnings;
my $file = shift @ARGV;
open( FILE, $file );
while (<FILE>) {
    my $line = $_;
    chomp $line;
    my @c = split( "\t", $line );
    my $p = $c[5];
    if ( $p !~ /\d/ ) { next; }    # this value will be a number if it is present
    print "$line\n";
}
close FILE;

当我运行它时,我会收到一条错误消息,抱怨不熟悉的值混淆了Regex语句。如果有一个 If 语句,我可以使用它来检查不熟悉的值?是否还有其他方法来编写基于第6列中存在的值的if语句?

注意:我考虑过使用pop函数来获得最正确的值,并检查该值是否是一个数字,但这是不可取的,因为在我的示例中,右边有更多列,有时是数字列,有时是文本列,有时是空白列。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-10-15 21:12:39

是否有一条if语句可以用于检查不熟悉的值?是否还有其他方法来编写基于第6列中存在的值的if语句?

有很多种方法可以做到这一点。您可以使用“未定义-或”运算符(//)。

代码语言:javascript
复制
next unless ( $p // '' ) =~ /\d/;

或者你可以检查一下是否明确:

代码语言:javascript
复制
next unless defined( $p ) && $p =~ /\d/;

如果不是'0'是一个有效的数字字符串,您可以简单地检查"falseness",如下所示:

代码语言:javascript
复制
next unless $p && $p =~ /\d/;

不过,我想我会尝试向您展示如何使用Text::CSV进行此操作:

代码语言:javascript
复制
my $csv = Text::CSV->new ({ sep_char => "\t" });    
while ( my $line = <FILE> ) {
    chomp $line;
    next unless $line;
    die $csv->error_diag 
        unless $csv->parse( $line )
        ;
    next unless defined( my $p = ( $csv->fields )[5] );
    next unless $p =~ /\d/;
    say $line;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26390225

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档