Как объединить несколько файлов CSV, каждый отравляется большой дозой наркотика файл на командной строке. Один лист на исходный файл

Как объединить несколько файлов CSV, каждый отравляется большой дозой наркотика файл, один лист на файл. У меня есть десять файлов CSV, и я хотел бы объединить их, каждый отравляется большой дозой наркотика файл, состоявший из десяти листов, один на исходный CSV. Это должно быть сделано на командной строке.

1
задан 2 October 2018 в 22:07

1 ответ

С жемчугом:

#!/usr/bin/env perl
use strict;
use warnings;
use autodie;
# CPAN modules required:
use Spreadsheet::Write;
use Text::CSV;

my $xlsx_file = shift @ARGV;
$xlsx_file .= ".xlsx" unless $xlsx_file =~ /\.xlsx$/;
my $xlsx = Spreadsheet::Write->new(file => $xlsx_file);
my $csv = Text::CSV->new({binary => 1});

for my $csv_file (@ARGV) {
    my @rows = ();
    open my $fh, "<:encoding(utf8)", $csv_file;
    while (my $row = $csv->getline($fh)) {
        push @rows, $row;
    }
    $csv->eof or $csv->error_diag();
    close $fh;  

    (my $sheet_name = $csv_file) =~ s/\.[^.]+$//;   # strip extension
    $xlsx->addsheet($sheet_name);
    $xlsx->addrows(@rows);
}
$xlsx->close();

И используйте его как:

/path/to/create_xlsx.pl file.xlsx *.csv

Если жемчуг не является Вашей вещью, немного поиска с помощью Google показывает:

2
ответ дан 7 December 2019 в 13:21

Другие вопросы по тегам:

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