Perl ArrayOfArrays到csv文件:第一个内部数组为空?
下面的代码获取上传的csv文件,将其保存在数组中,然后我尝试使用Text::csvxs从数组中创建一个新的csv文件。 我知道我可以把上传的文件保存为“move_to”,但这不是我想做的 我的问题是: 当我保存csv文件时,这个csv文件的第一行和最后一行是空的,我不明白为什么。有人能给我解释一下吗Perl ArrayOfArrays到csv文件:第一个内部数组为空?,perl,csv,Perl,Csv,下面的代码获取上传的csv文件,将其保存在数组中,然后我尝试使用Text::csvxs从数组中创建一个新的csv文件。 我知道我可以把上传的文件保存为“move_to”,但这不是我想做的 我的问题是: 当我保存csv文件时,这个csv文件的第一行和最后一行是空的,我不明白为什么。有人能给我解释一下吗 package MyApp::Controller::Main; use Mojo::Base 'Mojolicious::Controller'; use Text::CSV_XS qw( csv
package MyApp::Controller::Main;
use Mojo::Base 'Mojolicious::Controller';
use Text::CSV_XS qw( csv );
use Encode;
use Cwd;
sub upload {
my $self = shift;
return $self->render(text => 'File is too big.', status => 200) if $self->req->is_limit_exceeded;
return $self->redirect_to('/') unless my $newCsv = $self->req->upload('fileToUpload')->slurp;
open(my $myFH, '<',\$newCsv) or die $!;
my @lines = readline($myFH);
close($myFH);
my $checkCsv = Text::CSV_XS->new({sep_char => ';', quote_char => '"'});
my @csvArray = [];
# my $arrayIndex = 0; #temp
foreach my $line (@lines){
$line = decode('UTF-8', $line);
$line =~ s/\N{U+FEFF}//; # remove the BOM
$line =~ s/\s+$//g; # remove \n
if ($checkCsv->parse($line) and $checkCsv->fields()){
my @fields = $checkCsv->fields();
push(@csvArray, \@fields);
}
}
$self->app->log->debug($self->dumper(@csvArray));
my $size = $self->param('fileToUpload')->size;
my $name = $self->param('fileToUpload')->filename;
csv (in => \@csvArray, sep_char=> ";", out => getcwd.'/lib/MyApp/files/'.$name);
# $self->app->log->debug(getcwd);
my $delay = 3;
$self->stash(delay => $delay, message => "Thanks for uploading $size byte file $name.<br>
You will be redirected in $delay seconds");
$self->render('main/upload');
}
包MyApp::Controller::Main;
使用Mojo::Base'Mojolicious::Controller';
使用Text::CSV_XS qw(CSV);
使用编码;
使用化学武器;
子上传{
我的$self=shift;
如果超出$self->req->限制,则返回$self->render(text=>'文件太大',状态=>200);
返回$self->redirect_到('/'),除非我的$newCsv=$self->req->upload('fileToUpload')->slurp;
打开(my$myFH),更换
my @csvArray = []; # Create empty array @cvsArray, then add a ref to an empty array to it.
与
更好的方法是,只需使用以下内容:
my @csvArray; # Create empty array @cvsArray.
替换
my @csvArray = []; # Create empty array @cvsArray, then add a ref to an empty array to it.
与
更好的方法是,只需使用以下内容:
my @csvArray; # Create empty array @cvsArray.