在Perl中,如何正确解析带引号字符串的制表符/空格分隔文件?

在Perl中,如何正确解析带引号字符串的制表符/空格分隔文件?,perl,parsing,split,text-parsing,Perl,Parsing,Split,Text Parsing,我需要解析以制表符/空格分隔的文件,这些文件在Perl中有很多列。这些值使得在双引号中包含大字符串。这些字符串可以有任何字符,如制表符、空格或其他任何字符 当我尝试用split函数解析它们时,它也会拆分这些字符串。现在,我如何让perl理解“”中的字符串是一个单列条目 一个简单的例子是 12 345546.67677 "Hello World!!!" -567.55656 0.5465767 "Hello_Again; " 使用库,它将为您处理所有边缘案例。它允许您设置分隔符: my

我需要解析以制表符/空格分隔的文件,这些文件在Perl中有很多列。这些值使得在双引号中包含大字符串。这些字符串可以有任何字符,如制表符、空格或其他任何字符

当我尝试用split函数解析它们时,它也会拆分这些字符串。现在,我如何让perl理解“”中的字符串是一个单列条目

一个简单的例子是

12  345546.67677   "Hello World!!!" -567.55656 0.5465767 "Hello_Again;   "
使用库,它将为您处理所有边缘案例。它允许您设置分隔符:

my $csv = Text::CSV->new({sep_char => "\t"});
其他可能是和。

注意,您说的是制表符/空格分隔符。如果分隔符是混合的和/或必须将连续的空格视为一个,则使用以下分隔符可能会更容易:

#!/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;   "
#/usr/bin/perl
使用Text::ParseWords qw(quotewords);
使用YAML;
while(我的$line=){
打印转储[quotewords('\s+',0,$line)];
}
__资料__
12345546.67677“你好,世界!!!”-567.55656 0.5465767“再次你好”
输出:

--- - 12 - 345546.67677 - Hello World!!! - -567.55656 - 0.5465767 - 'Hello_Again; ' --- - 12 - 345546.67677 -你好,世界!!! - -567.55656 - 0.5465767 -“又来了你好;”