Como posso analisar o CSV citado no Perl com um regex?
Estou tendo alguns problemas ao analisar dados CSV com aspas. Meu principal problema é com aspas dentro de um campo. No exemplo a seguir, as linhas 1 a 4 funcionam corretamente, mas 5,6 e 7 nã
COLLOQ_TYPE,COLLOQ_NAME,COLLOQ_CODE,XDATA
S,"BELT,FAN",003541547,
S,"BELT V,FAN",000324244,
S,SHROUD SPRING SCREW,000868265,
S,"D" REL VALVE ASSY,000771881,
S,"YBELT,"V"",000323030,
S,"YBELT,'V'",000322933,
Gostaria de evitar o Text :: CSV, pois não está instalado no servidor de destino. Perceber que os CSVs são mais complicados do que parecem, estou usando uma receita do 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.
}
Alguém tem uma sugestão para melhorar a regex para lidar com os casos acima?