当 $STRING 以“\t\t”结尾时,如何让 split(/\t/, $STRING) 检测空值?
How can I make split(/\t/, $STRING) detect empty values when $STRING ends with "\t\t"?
当 $STRING
以 "\t\t"
结尾时,如何让 split(/\t/, $STRING)
检测到空项?
我尝试使用 Perl 脚本拆分字符串作为项目之间的分隔符,然后计算并使用这些项目。但是,当字符串以组合 s 结尾时,脚本不计算空项。
示例:
string="value1\tvalue2\t\t\t\t"
(值 1、值 2 和 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
通过添加 -1
作为参数更改 split
行:
my @F = split(/\t/, $STRING, -1);
输出:
value1 value2
6
Done
根据 perldoc split
,split
的参数是 PATTERN, EXPR, LIMIT
。在您当前的情况下,"LIMIT is omitted so "尾随的空字段被删除。"
通过为 LIMIT
添加 -1
值:
If LIMIT is negative, it is treated as if it were instead arbitrarily large; as many fields as possible are produced.
因此,否定的最终参数会阻止 split
丢弃尾随字段。
当 $STRING
以 "\t\t"
结尾时,如何让 split(/\t/, $STRING)
检测到空项?
我尝试使用 Perl 脚本拆分字符串作为项目之间的分隔符,然后计算并使用这些项目。但是,当字符串以组合 s 结尾时,脚本不计算空项。
示例:
string="value1\tvalue2\t\t\t\t"
(值 1、值 2 和 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
通过添加 -1
作为参数更改 split
行:
my @F = split(/\t/, $STRING, -1);
输出:
value1 value2
6
Done
根据 perldoc split
,split
的参数是 PATTERN, EXPR, LIMIT
。在您当前的情况下,"LIMIT is omitted so "尾随的空字段被删除。"
通过为 LIMIT
添加 -1
值:
If LIMIT is negative, it is treated as if it were instead arbitrarily large; as many fields as possible are produced.
因此,否定的最终参数会阻止 split
丢弃尾随字段。