我使用引号解析CSV数据时遇到了一些问题.我的主要问题是一个字段中的引号.在以下示例中,第1-4行正确工作,但5,6和7不正常.
COLLOQ_TYPE,COLLOQ_NAME,COLLOQ_CODE,XDATA S,"BELT,FAN",003541547,S,"BELT V,000324244,SHROUD SPRING SCREW,000868265,"D" REL VALVE ASSY,000771881,"YBELT,"V"",000323030,'V'",000322933,
我想避免使用Text :: CSV,因为它没有安装在目标服务器上.意识到CSV比我们使用Perl Cookbook的食谱更复杂.
sub parse_csv { my $text = shift; #record containg CSVs my @columns = (); push(@columns,$+) while $text =~ m{ # The first part groups the phrase inside quotes "([^\"\\]*(?:\\.[^\"\\]*)*)",? | ([^,]+),? |,}gx; push(@columns,undef) if substr($text,-1,1) eq ','; return @columns ; # list of vars that was comma separated. }
有没有人提出改进正则表达式来处理上述情况?
请尝试使用CPAN
没有任何理由无法下载Text::CSV的副本,或任何其他基于XS的CSV解析器的实现,并将其安装在您的本地目录或项目的lib / sub目录中,以便与您的项目一起安装推出.
如果您无法在项目中存储文本文件,那么我想知道如何编码您的项目.
http://novosial.org/perl/life-with-cpan/non-root/
应该是一个很好的指导,如何让他们进入当地的工作状态.
不使用CPAN真的是灾难的秘诀.
在尝试编写自己的CSV实现之前,请考虑这一点.
Text::CSV是超过一百行代码,包括固定的错误和边缘案例,并从头开始重写这只会让你学到如何糟糕的CSV可以是艰难的方式.
注意:我学到了这个难题.在我发现在后来的版本中添加了一个内置的文件之后,让我一整天都能在PHP中获得一个工作的CSV解析器.真的很可怕