Perl 电子表格::WriteExcel出现问题,使我运行脚本两次以获取所需文件

Perl 电子表格::WriteExcel出现问题,使我运行脚本两次以获取所需文件,perl,Perl,我有一个制表符分隔的文件,我想写入Excel。我使用了电子表格::WriteExcel,但第一次运行只会在Excel中写入99行,然后在第100行的中途停止。我已经检查了我的标签del.txt,没有多余的空格或新行。.txt文件中的所有行都有14或15个值,打印输出的print$row size显示14/15,但最后一行显示6。当我再次运行它时,它会显示第二次运行时剩下的行,但也会显示其他行。有人能帮我检查一下代码,看看问题出在哪里吗 open(FIRST, '>>'

我有一个制表符分隔的文件,我想写入Excel。我使用了电子表格::WriteExcel,但第一次运行只会在Excel中写入99行,然后在第100行的中途停止。我已经检查了我的标签del.txt,没有多余的空格或新行。.txt文件中的所有行都有14或15个值,打印输出的
print$row size
显示14/15,但最后一行显示
6
。当我再次运行它时,它会显示第二次运行时剩下的行,但也会显示其他行。有人能帮我检查一下代码,看看问题出在哪里吗

        open(FIRST, '>>', $first_file) || die "";
        #create tab delimted file
        close(FIRST);
        open(SECOND, $first_file) || die "cannot open $ind_output to write to excel";
        my $xl_row_num = 0;
        my $xl_file = "tab_ann.xls";
        my $xl = Spreadsheet::WriteExcel->new($xl_file);
        my $txt_xl = $xl -> add_worksheet();
        my $format = $xl -> add_format();
        $format->set_color('red');
        while(my $line = <SECOND>){
            #create an array containing each value the current line
            my @data = split("\t", $line); 
            #my $size = scalar(@data);
            #print "row size:\t".$size."\n";
            print "row rum:\t".$xl_row_num."\n";
            #Write each value in array in separate cell in a single row.
            for(my $col=0; $col < $size+1; $col++){
                   $txt_xl->write($xl_row_num, $col, $data[$col], $format);
            }
        @data=();
        $xl_row_num++;
        }
        close SECOND;
open(第一个“>>”,$FIRST_文件)| | die“;
#创建选项卡删除的文件
关闭(第一);
打开(第二个,$first_文件)| | die“无法打开$ind_输出以写入excel”;
我的$xl\u行数=0;
我的$xl\u file=“tab\u ann.xls”;
my$xl=电子表格::WriteExcel->new($xl\u文件);
我的$txt_xl=$xl->add_工作表();
my$format=$xl->add_format();
$format->set_color('red');
while(我的$line=){
#创建包含当前行中每个值的数组
my@data=split(“\t”,美元行);
#我的$size=标量(@data);
#打印“行大小:\t”。$size.\n”;
打印“row rum:\t”。$xl\u row\u num.\n”;
#将数组中的每个值写入单行中的单独单元格中。
对于(我的$col=0;$col<$size+1;$col++){
$txt\u xl->write($xl\u row\u num,$col,$data[$col],$format);
}
@数据=();
$xl_row_num++;
}
紧随其后;

当你从第二行开始阅读时,我至少会在循环中咀嚼($line)。我认为这不会解决您的问题,但这些换行符不属于excel工作表。当您再次运行它时,您复制了输出,这是因为您在创建文件时使用了“>>”,因此实际上是追加而不是覆盖。如果在第一次运行后,$first_文件包含了它应该包含的所有内容,但excel没有,那么我唯一能想到的就是网络文件系统的一些奇怪的错误配置,数据没有正确刷新。@GuntramBlohm,我最初有
写入选项,并通过
发现$first\u文件不是问题所在。忘记了
chomp()
,但是运气不好,但是我很感谢您的输入。所以让我直截了当地说:您编写以制表符分隔的文件,然后在同一脚本中读回,以便生成您的Excel文件。Excel生成代码看起来不错。(为了安全起见,我可能会添加一个
$xl->close()
,但在这种情况下并不严格需要它。)问题似乎介于
先关闭
后打开
之间。您确定
先打开
先关闭
之间的代码完全写入了您正在阅读的文件吗?
close FIRST
是否返回错误?是的,我有
xl_file1
作为记录的主列表,我需要按人名将其分解为较小的excel文件。以制表符分隔的文件是
xl\u file1
的注释/子集。在为WriteExcel打开txt文件之前,我已确保该文件已关闭,因此这不是问题所在。在您
close FIRST
时,是否确定该文件包含您所期望的所有内容?