Forum Webscript.Ru
Программирование => Perl => Тема начата: Evgeny от 25 Февраля 2003, 15:36:44
-
А знает кто-нибудь шаблона для ф-ции split, чтобы правильно разбить csv-строку.
Например это "a""a;a";"b""""b;b";""";"";" должно так разбиваться:
$a[0]: a"a;a
$a[1]: b""b;b
$a[2]: ";";
А вот можно ли такое с помощью одного шаблона сделать?(я имею ввиду без того, чтобы дополнительно ещё раз строку проходить-просматривать и т.п.)
-
@a = split(\'\\";\\"\', $text); ?
-
NeoNox, он имел в виду, что точка с запятой экранируется кавычками.
Я бы сделал проходом строки по символу в цикле считая кавычки - т.е. если кавычки открыты не разбивать по \';\', а если закрыты - то выделить с пред. \';\' по substr.
Ну и конечно есть
Text::CSV и DBD::CSV - можно посмотреть как они написаны.
-
Ну и конечно есть
Text::CSV и DBD::CSV
Я с DBD::CSV когда-то работал.
Там с "левым" форматом csv лучше не подходить.
В любом случае ему sep_char нужно задавать.
-
Вот это я, кстати, не понял, почему в первом случае нет \';\' а во втором есть?
$a[0]: a"aa
$a[1]: b""b;b
-
NeoNox
Вот это я, кстати, не понял, почему в первом случае нет \';\' а во втором есть?
$a[0]: a"aa
$a[1]: b""b;b
Сорри, сейчас исправлю вверху.
Кавычка экранируется кавычкой, т.е. a"a -> a""a
А если в поле содержится ; то всё поле заключается в кавычки:
a;a -> "a;a"
Соединяем всё вместе и получаем:
b""b;b -> "b""""b;b"