Вы не упоминаете формат текстовых файлов, поэтому реальный пример кода сложен, но вы можете использовать для этого Spreadsheet :: WriteExcel .Посмотрите на метод add_worksheet () для создания новых вкладок.
Учитывая, что вы говорите, что каждая строка - это число, за которым следует текст, я предполагаю, что это два столбца в строке с пробелом, разделяющим первый и второй столбцы.и только цифры в первом столбце.Если это не так, приведенное ниже регулярное выражение необходимо будет скорректировать.Тем не менее, вот пример кода.
#!/usr/bin/env perl
use strict;
use warnings;
use Spreadsheet::WriteExcel;
sub read_file{
my $f = shift;
my @row;
open(my $fh, '<', $f) or die $!;
while(<$fh>){
chomp;
s/^(d+)s+//; # assuming format of "1 Text heren2 More textn"
if(defined $1){
push(@row, [$1, $_]);
}
}
close($fh) or die $!;
return @row;
}
if($#ARGV < 1){
die "$0: file1 [file2 ... filen] output.xls\n";
}
my $xl = Spreadsheet::WriteExcel->new(pop);
foreach my $file (@ARGV){
if( -f $file){
my @rows = read_file($file);
my $sheet = $xl->add_worksheet($file);
for my $row (0..$#rows){
my @cols = @{$rows[$row]};
for my $col (0..$#cols){
$sheet->write($row, $col, $cols[$col]);
}
}
}
}
Входные файлы задаются в командной строке и обрабатываются по порядку, превращая каждый из них во вкладку, названную в честь имени файла.Имя выходного файла указывается в командной строке последним, после одного или нескольких имен входных файлов.
РЕДАКТИРОВАТЬ: Теперь включая улучшения FM , упомянутые в его комментарии, и тривиальный CLI для указанияимя выходного файла.