【问题标题】:How can I make split(/\t/, $STRING) detect empty values when $STRING ends with "\t\t"?当 $STRING 以“\t\t”结尾时,如何让 split(/\t/, $STRING) 检测空值?
【发布时间】:2019-12-15 09:32:12
【问题描述】:

$STRING"\t\t" 结尾时,如何让split(/\t/, $STRING) 检测空项目?

使用 Perl 脚本,我尝试将字符串拆分为项目之间的分隔符,然后计算并使用这些项目。但是,当字符串以组合 s 结尾时,脚本不计算空项。

例子:

string="value1\tvalue2\t\t\t\t"(value1、value2 和 4 个空项)

但它计算 2 个项目(value1,value2):

$STRING="value1\tvalue2\t\t\t\t";
print $STRING."\n";
my @F = split(/\t/, $STRING);
print scalar(@F)."\n";

# The number of items must match the number of header name
if( scalar(@F) == 6 )
            {
                    print  "Done \n";
            }

代码打印:

value1  value2      
2

而预期是:

value1  value2  
6

【问题讨论】:

    标签: string perl whitespace trailing


    【解决方案1】:

    通过添加-1 作为参数来更改split 行:

    my @F = split(/\t/, $STRING, -1);
    

    输出:

    value1  value2              
    6
    Done 
    

    根据perldoc splitsplit 的参数是PATTERN, EXPR, LIMIT。在您当前的情况下,“LIMIT 被省略,因此”尾随空字段被剥离。”

    通过为LIMIT 添加-1 值:

    如果 LIMIT 为负数,则将其视为任意大;生成尽可能多的字段。

    因此,否定的最终参数可防止 split 丢弃尾随字段。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-29
      • 1970-01-01
      • 2020-11-27
      • 1970-01-01
      • 2012-01-19
      相关资源
      最近更新 更多