sfa*_*tor 4 perl parsing split text-parsing
我需要解析在Perl中有很多列的制表符/空格分隔文件.这些值是双引号括起来的大字符串.这些字符串可以包含任何字符,例如制表符和空格或其他任何字符.
当我尝试使用split函数解析它们时,它也会分割这些字符串.现在,我如何让perl理解""中的字符串是单个列条目?
一个简单的例子是,
12 345546.67677 "Hello World!!!" -567.55656 0.5465767 "Hello_Again; "
Run Code Online (Sandbox Code Playgroud)
mar*_*cog 20
使用Text::CSV库,它可以为您处理所有边缘情况.它允许您设置分隔符:
my $csv = Text::CSV->new({sep_char => "\t"});
Run Code Online (Sandbox Code Playgroud)
请注意,您说tab/space分隔.如果分隔符是混合的和/或您必须将连续的空格视为一个,则使用Text :: ParseWords可能更容易:
#!/usr/bin/perl
use Text::ParseWords qw( quotewords );
use YAML;
while ( my $line = <DATA> ) {
print Dump [ quotewords('\s+', 0, $line) ];
}
__DATA__
12 345546.67677 "Hello World!!!" -567.55656 0.5465767 "Hello_Again; "
Run Code Online (Sandbox Code Playgroud)
输出:
--- - 12 - 345546.67677 - Hello World!!! - -567.55656 - 0.5465767 - 'Hello_Again; '