2009-06-23 1 views
1

Я читаю CSV-файл, который был создан в Excel, причем первая строка является заголовком столбца. Один заголовок столбца содержит встроенную новую строку. Я хочу, чтобы игнорировать эту строку, но читая его линию за линией, как:Как обрабатывать встроенные строки в CSV-файлах в Perl?

while (<IN>) { 
    ... 
    } 

будет рассматривать его в качестве новой линии, которая нарушит мой код (который я до сих пор не написано). Мой подход состоял в том, чтобы прочитать первую строку в массиве заголовков столбцов и обработать остальные строки по-разному.

Может ли быть регулярное выражение, которое я могу использовать где-то в while, который игнорирует новую строку, если это не последняя новая строка?

Или я должен подходить к этому по-другому?

ответ

13

Используйте один из модулей Perl, которые обрабатывают CSV, например Text::CSV_XS. В его документации показано, как обрабатывать встроенные новые строки. В общем, вы не хотите тратить свое время на запись другого анализатора CSV; займитесь более важными частями своей задачи!

+3

Разбор CSV на удивление сложный и для всех, кроме самого тривиального кода (i, e, как только вы думаете, что что-то может сломаться на 'split ',', $ line', вы должны использовать CPAN. Текст :: CSV_XS и Text :: XSV - это два, которые вы должны учитывать. Я использую первый из-за инерции, но последний является более новым и, вероятно, лучше для многих применений. – singingfish

+0

Я думаю, вы имели в виду, что это ваш собственный ответ, а не комментарий к моему. –

+1

Мне сказали, что это не сработает, но я вижу, что есть двоичный вариант, который может поставить ставку. Я попробую. Спасибо за редактирование. –