【问题标题】:Splitting a string having comma separated and a text qualifier using perl使用Perl拆分具有逗号分隔的字符串和文本限定符
【发布时间】:2012-11-04 03:20:52
【问题描述】:

我需要使用 perl 拆分下面的字符串,详细信息如下。我需要将数据从 CSV 文件加载到表中。字符串变量用“”括起来。请给我一个想法,我是 perl 脚本的新手。

字符串:"February 6, 2012","","","1","02/06/12","","",1,1,0

输出:

February 6, 2012
<BLANK VALUE>
<BLANK VALUE>
1
02/06/12
<BLANK VALUE>
<BLANK VALUE>
1
1
0

【问题讨论】:

  • Stackoverflow 不是“为我编写代码”论坛。向我们展示您拥有的东西,我们会帮助您改进它。

标签: string perl split


【解决方案1】:

这看起来很像 CSV。如果是,那么请帮自己和我们一个忙,并为它使用适当的模块而不是正则表达式。还有优秀的Text::CSV_XS

【讨论】:

    【解决方案2】:

    您可以使用正则表达式对其进行拆分。您要拆分的每个项目都应包装在一个组中,如下所示

    ^\"(.*?)\",\"\",\"\",\"(.*?)\",\"(.*?)\",\"\",\"\",(\d),(\d),(\d)
    

    括号中的表达式是一个组,那么你可以在代码中得到组。

    【讨论】:

    • 这样的正则表达式是使用 Text:CSV 等模块的绝佳广告 :-)
    【解决方案3】:
    #!/usr/bin/perl
    use strict;
    use warnings;
    
    my $ac = qq("February 6, 2012","","","1","02/06/12","","",1,1,0);
    
    $ac=~s/\"//ig;
    my @arr = split(',', $ac);
    $arr[0] .= $arr[1];
    print $arr[0] . "\n"; # the date is February 6, 2012
    
    # print other elements
    for (my $i=2; $i < @arr; $i++) {
        if ($arr[$i] eq '') {print "<BLANK VALUE>\n";}
        else {print $arr[$i] . "\n";}
    }
    

    【讨论】:

    • 引号内是否有逗号?如果不是,请以逗号分隔并从所有字段中删除前导引号和结束引号。这是 CSV 文件吗?如果是这样,请使用 Text::CSV 模块为您完成繁琐的工作。
    猜你喜欢
    • 2018-12-21
    • 2015-03-07
    • 1970-01-01
    • 2016-10-19
    • 1970-01-01
    • 2017-01-05
    • 2012-05-24
    相关资源
    最近更新 更多