Вы можете проанализировать CSV, используя Text :: ParseWords , который поставляется с Perl.
use Text::ParseWords;
while (<DATA>) {
chomp;
my @f = quotewords ',', 0, $_;
say join ":" => @f;
}
__DATA__
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,
, который правильно анализирует ваш CSV ....
# => 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:
Единственная проблема, с которой я столкнулся при работе с Text :: ParseWords, заключается в том, что вложенные кавычки в данных не экранируются правильно. Однако это плохо скомпонованные данные CSV и могут вызвать проблемы с большинством анализаторов CSV; -)
Итак, вы можете заметить, что
# S,"YBELT,"V"",000323030,
вышло как (т. Е. Кавычки опущены вокруг "V")
# S:YBELT,V:000323030:
Однако, если он сбежал, как это
# S,"YBELT,\"V\"",000323030,
тогда цитаты будут сохранены
# S:YBELT,"V":000323030: