2012-03-17 80 views
1

我试图压缩一些CSV文件,这是约5 MB用Perl。以下是我的邮政编码。 该文件是压缩,但是当我使用Windows解压缩工具中打开这些我发现,CSV文件的最后一行丢失。这里可能是什么问题?我试图改变chuncksizedesiredCompressionLevel,但这没有帮助。用Perl荏苒文件,最后一行被切断

sub zip_util{ 
    my $directory = shift; 
    $zip = Archive::Zip->new(); 
    $zip->setChunkSize(65536); 
    # Add a file from disk 

    my $file1=File::Spec->catfile($directory, 'file.csv'); 
    my $file2=File::Spec->catfile($directory, 'file2.csv'); 
    my $file3=File::Spec->catfile($directory, 'fil3.csv'); 
    $zip->addFile($file1,'file1.csv')->desiredCompressionLevel(6); 
    $zip->addFile($file2,'file2.csv')->desiredCompressionLevel(6); 
    $zip->addFile($fil3,'file3.csv')->desiredCompressionLevel(6); 

    # Save the Zip file 
    my $zipped_file=File::Spec->catfile($directory,'files.zip'); 
    unless ($zip->writeToFileNamed($zipped_file) == AZ_OK) { 
     print LOG ": Zip Creation error\n"; 
    } 
+1

这可能与['存档:: Zip'(https://metacpan.org/module/Archive::Zip)的问题。但是,为了确保,您能否上传原始CSV文件以及生成的存档? – 2012-03-17 21:21:11

回答

1

我已经检查了警告和限制,我发现了一些问题。

  1. $zip不使用my(我不知道这是否是故意的,但use strict真正与全局帮助像这样的)。
  2. 您正在运行$zip->addFile($fil3,'file3.csv')。变量绝对不存在。如果有的话,这个变量是$file3
  3. 我想这是复制和粘贴过程中的问题,但子程序没有匹配的括号。

我已经做了我已经测试过程中使用快速脚本。

use strict; 
use warnings; 
use Archive::Zip qw(:ERROR_CODES); 
use File::Spec; 

sub zip_util { 
    my ($directory) = @_; 
    my $zip = Archive::Zip->new(); 
    $zip->setChunkSize(65536); 

    # Add a file from disk 
    my $file1 = File::Spec->catfile($directory, 'file.csv'); 
    my $file2 = File::Spec->catfile($directory, 'file2.csv'); 
    my $file3 = File::Spec->catfile($directory, 'file3.csv'); 
    $zip->addFile($file1, 'file1.csv')->desiredCompressionLevel(6); 
    $zip->addFile($file2, 'file2.csv')->desiredCompressionLevel(6); 
    $zip->addFile($file3, 'file3.csv')->desiredCompressionLevel(6); 

    # Save the Zip file 
    my $zipped_file = File::Spec->catfile($directory, 'files.zip'); 
    if ($zip->writeToFileNamed($zipped_file) != AZ_OK) { 
     print STDERR "Zip Creation error\n"; 
    } 
} 

zip_util '.'; 

问题是它正在工作。所以,我做了这个脚本,以某种5MB文件:

use strict; 
use warnings; 
use 5.010; 

for (1 .. 524_288) { 
    my $number = $_ % 10; 
    say "$number-------"; 
} 

在ZIP和原来的“CSV”这两个文件有同样大小和内容。所以,这可能是我提到的第二个问题 - 在您的文件中使用$fil3变量或其他东西(您可能没有上传,因此我无法查看这些内容)。