我使用引号解析CSV数据时遇到了一些问题.我的主要问题是一个字段中的引号.在以下示例中,第1-4行正确工作,但5,6和7不正常.
@H_403_10@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. }
有没有人提出改进正则表达式来处理上述情况?