Подтвердить что ты не робот

Как создать файл CSV с помощью Perl?

Я хочу создать файл CSV с помощью Perl и записать в него некоторые данные. Есть ли способ сделать это?

4b9b3361

Ответ 1

Вы можете использовать Class: CSV.

use Class::CSV;

my $csv = Class::CSV->new(
  fields         => [qw/userid username/]
);

$csv->add_line([2063, 'testuser']);
$csv->add_line({
  userid   => 2064,
  username => 'testuser2'
});

$csv->print();

# 2063,testuser
# 2064,testuser2

Изменить. Для получения дополнительных библиотек вы можете найти CPAN.

Ответ 2

Обычно мы используем Text::CSV_XS (который указан выше Class::CSV основывается на)

ОБНОВЛЕНИЕ: В комментариях ниже также предлагается использовать Text::CSV, который будет загружать Text::CSV_XS или, если это не avialable, опуститесь на Text::CSV_PP который не имеет зависимости XS и может быть проще установить.

Ответ 3

Существует несколько способов сделать это.

  • DBD::CSV - Используйте SQL для чтения и записи CSV файлов.
  • Text::CSV - Создавать и анализировать CSV файлы по очереди за раз. Это в значительной степени - золотой стандарт для манипулирования CSV.
  • POE::Filter::CSV - Предоставляет CSV-фильтр для вашего POE-компонента IO.
  • Data::Tabular::Dumper::CSV - Дамп таблицы непосредственно в CSV файл (объекты с одним и тем же интерфейсом могут сбрасывать файлы XML или MS Excel).

Есть много других на CPAN, также.

Конечно, вы можете игнорировать все это и просто использовать цикл, соединение и печать:

my @table = (
  [ 'a', 'b', 'c'],
  [  1,   2,   3 ],
  [  2,   4,   6 ],
);

for my $row ( @table ) {
    print join( ',', @$row ), "\n";
}

Просто запустите свой script и перенаправляйте вывод в файл, bang! вы сделали. Или вы можете сходить с ума и open дескриптор файла и печатать напрямую в файл.

Но тогда вы не будете обрабатывать многострочные поля или встроенные запятые или любую из многих других странностей, которые могут появиться в этой задаче обработки данных. Поэтому будьте осторожны с этим подходом.

Мои рекомендации:

  • Если вы строите POE приложения, используйте POE:: Filter.
  • Если вы монстр SQL/DBI и мечтаете в SQL, или, возможно, потребуется заменить CSV вывод с реальной базой данных соединение, используйте DBD:: SQL.
  • Если у вас есть простые данные и собираются вместе крошечный маленький выброс script в отформатируйте некоторые данные для своей таблицы переваривать, использовать печать и соединение - делать это без кода с ожидаемым сроком службы более 2 часов.
  • Если вы хотите сбросить капли данных в Использование CSV или XML Данные:: Табличный:: Dumper:: CSV.
  • Если вы пишете что-то, что должно быть стабильным, поддерживаемым и быстрым, и вам нужен максимальный контроль для ввода и вывода, используйте Text:: CSV. (Обратите внимание, что POE:: Filter:: CSV, Data:: Tabular:: Dumper:: CSV и DBD:: CSV используют Text:: CSV или Text:: CSV_XS для обработки в фоновом режиме).