следующий код берет загруженный csv-файл, сохраняет его в массиве массивов, а затем я пытаюсь создать новый csv-файл из этого массива массивов с помощью Text :: CSV_XS.
Я знаю, что могу просто взять загруженный файл и сохранить его с помощью «move_to», но я не хочу этого делать.
Моя проблема здесь:
Когда я сохраняю CSV-файл, первая и последняя строки этого 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');
}
Заранее спасибо.