保存文件

时间:2016-10-26 08:19:49

标签: perl

我想在我的脚本中比较两个文件的内容。为了做到这一点,我将文件加载到数组中。第一个文件包含我在第二个文件中搜索的唯一名称。问题与比较无关,但是我必须将结果保存到文件中,该名称包含来自@unique_names数组的值。错误出现在比较后我正在创建文件的行中。 $file_name内容的示例:PT_FCT_Sales_20161003.outprint $outputFolder . $ file_name的结果为c:\Strawberry\PT_FCT_Sales_20161003.out

foreach my $file (@Files){
    if ($file =~ /out$/i){
        if ($file =~ /PT_FCT_Sales_/i){
            open(my $INFILE,  "<", $file) or die $!;

            @lines = <$INFILE>;

            foreach (my $i = 0; $i < @unique_names; $i++) {
                my $file_name = join('', @unique_names[$i]);
                #print $file_name;
                my @data;
                foreach $line (@lines) {
                    if ($line =~ @unique_names[$i] ) {
                        push (@data, $line);
                    }
                }

                open(my $OUTFILE, ">>", $outputFolder . $file_name) or die $!; #error appears here
                print $OUTFILE @data;
                close $OUTFILE;

            }
            close $INFILE or die "Can't close input file";
        }
    }
}

编辑:错误说:test.pl第71行第6行的参数无效。 请注意,这不是整个脚本,只是与问题相关的截止。

1 个答案:

答案 0 :(得分:0)

这是一个稍好的解决方案。未经测试。所以我会继续编辑和修复。请提供$ outputfolder定义的位置。

foreach my $file (@Files){
if ($file =~ /^PT_FCT_Sales.*\.out$/i){
        open(my $INFILE,  "<", $file) or die $!;
        @lines = <$INFILE>;
        foreach (my $i = 0; $i < @unique_names; $i++) {
            my $file_name = join('', $unique_names[$i]);
            my @data;
            while (<$INFILE>) {
                if ($line =~ $unique_names[$i] ) {
                    push (@data, $line);
                }
            }
            open(my $OUTFILE, ">> $outputFolder.$file_name") or die $!; #error appears here
            print $OUTFILE @data;
            close $OUTFILE;

            }
            close $INFILE or die "Can't close input file";
        }
    }