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

Так как Вы не заботитесь, какой заканчивается, почему не только имеют единственный WaitHandle для всех потоков и ожидают на этом? Какой бы ни каждый приходит первым, может установить дескриптор.

23
задан serenesat 28 April 2015 в 11:59
поделиться

3 ответа

Вы можете использовать Класс: 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 .

26
ответ дан 29 November 2019 в 01:18
поделиться

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

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

18
ответ дан 29 November 2019 в 01:18
поделиться

Есть несколько способов сделать это .

  • DBD :: CSV - Используйте SQL для чтения и записи файлов CSV.
  • Text :: CSV - Создавайте и анализируйте файлы CSV построчно. Это в значительной степени - золотой стандарт для обработки CSV.
  • POE :: Filter :: CSV - Предоставляет CSV-фильтр для ввода-вывода вашего компонента POE.
  • 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";
}

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

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

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

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

Похожие вопросы: