Я хочу создать файл CSV с помощью Perl и записать в него некоторые данные. Есть ли способ сделать это?
Как создать файл CSV с помощью Perl?
Ответ 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 для обработки в фоновом режиме).