首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >csv- ArrayOfArrays文件:第一个内部数组为空?

csv- ArrayOfArrays文件:第一个内部数组为空?
EN

Stack Overflow用户
提问于 2019-03-15 16:11:38
回答 1查看 46关注 0票数 0

下面的代码获取一个上传的csv文件,将其保存在一个数组的数组中,然后我尝试使用Text::CSV_XS从这个数组的数组中创建一个新的csv文件。我知道我可以将上传的文件保存为"move_to",但这不是我想要的。

这里我的问题是:当我保存csv文件时,这个csv文件的第一行和最后一行都是空的,我不知道为什么。有人能给我解释一下吗?

代码语言:javascript
复制
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');
}

提前谢谢你。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-15 16:58:21

替换

代码语言:javascript
复制
my @csvArray = [];   # Create empty array @cvsArray, then add a ref to an empty array to it.

使用

代码语言:javascript
复制
my @csvArray = ();   # Create empty array @cvsArray, then empty it.

更好的是,只需使用以下代码:

代码语言:javascript
复制
my @csvArray;        # Create empty array @cvsArray.
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55178166

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档