一段时间后返回Perl,我一直在寻找一种方法将一些制表符分隔的文本文件放入一个数组,然后放入一个Excel文件中;基本上是为目录中的每个文本文件生成的Excel选项卡。通常,文本文件是类似的格式。
下面的代码从示例中拼凑而成,通常会产生我想要的东西。但是输出忽略任何选项卡并在一个字符串中打印所有文本(每行)。我正在努力如何在代码中实现制表符分隔符。我知道我需要拆分文本文件,因为它们被推入数组。我一直在玩哈希,但我认为我对这个问题看起来太过分了,而且这可能是我错过的一个明显的答案。
use warnings;
use strict;
use Cwd qw(abs_path);
use Spreadsheet::WriteExcel;
die "Log path ARG required " unless defined $ARGV[0];
my $path = abs_path( $ARGV[0] );
my $workbook = Spreadsheet::WriteExcel->new("resultsbook.xls");
chdir $path or die "no such directory: $!";
if ( -d $path ) { ## test if $path given is a directory
opendir my $dir, $path or die "can't open the directory: $!";
while ( defined( my $file = readdir($dir) ) ) {
chomp $file;
next if $file eq '.' or $file eq '..';
(my $sheetname = $file) =~s/\.\w+?//;
my $wrksheet = $workbook->add_worksheet($sheetname);
$wrksheet->write_col( 0, 0, [ @{ readfile($file) } ] );
}
}
sub readfile {
my $textfilecontent = [];
open my $fh, '<', shift() or die "can't open file:$!";
while (<$fh>) {
chomp;
push @{$textfilecontent}, $_, $/;
}
return $textfilecontent;
}
答案 0 :(得分:3)
在将它们推入@textfilecontent变量之前,需要使用制表符(或任何分隔符)拆分行。这里还有一些其他的小修正:
use warnings;
use strict;
use Cwd qw(abs_path);
use Spreadsheet::WriteExcel;
die "Log path ARG required " unless defined $ARGV[0];
my $path = abs_path( $ARGV[0] );
my $workbook = Spreadsheet::WriteExcel->new("resultsbook.xls");
chdir $path or die "no such directory: $!";
if ( -d $path ) { ## test if $path given is a directory
opendir my $dir, $path or die "can't open the directory: $!";
while ( defined( my $file = readdir($dir) ) ) {
chomp $file;
next if $file eq '.' or $file eq '..';
(my $sheetname = $file) =~s/\.\w+//;
my $wrksheet = $workbook->add_worksheet($sheetname);
$wrksheet->write_col( 0, 0, readfile($file));
}
}
sub readfile {
my @textfilecontent = ();
open my $fh, '<', shift() or die "can't open file:$!";
while (<$fh>) {
chomp;
push @textfilecontent, [split(/\t/)];
}
return \@textfilecontent;
}