在perl中编写脚本以将文件夹中的所有文件转换为另一种格式

时间:2012-10-24 21:27:01

标签: perl ascii

问题是2折:

  1. 我正在写一个perl(不是perl经验)脚本,可以让它一次将一个文件从csv转换为ascii。我想做一个循环,将所有csv放在一个文件夹中,并将它们转换为ascii / txt。

  2. perl是尝试此操作的最佳语言吗?我假设是的,因为我可以一次成功地完成一个文件但是很难找到循环它的方法。

  3. 我试图找出如何将所有文件加载到一个数组中,然后为每个文件运行循环,但我的谷歌搜索已达到其极限,我没有想法。 这是我的工作脚本:

    #!/usr/bin/env perl
    use strict;
    use warnings;
    use autodie;
    
    use open IN => ':encoding(UTF-16)';
    use open OUT => ':encoding(ascii)';
    
    my $buffer;
    
    open(my $ifh, '<', 'Software_compname.csv');
    read($ifh, $buffer, -s $ifh);
    close($ifh);
    
    open(my $ofh, '>', 'Software_compname.txt');
    print($ofh $buffer);
    close($ofh);
    

2 个答案:

答案 0 :(得分:0)

只需将以下循环添加到您的脚本中,并将其作为参数提供给文件:

for my $input_file (glob shift) {
    (my $output_file = $input_file) =~ s/csv$/txt/ or do {
        warn "Invalid file name: $input_file\n";
        next;
    };

    my $buffer;

    open my $ifh, '<', $input_file;
    read $ifh, $buffer, -s $ifh;
    close $ifh;

    open my $ofh, '>', $output_file;
    print{$ofh} $buffer;
    close $ofh;
}

答案 1 :(得分:0)

如果您只想从Perl端进行此操作,我建议您使用File::Find::Rule

use File::Find::Rule;
my @files = File::Find::Rule->file()
                            ->name('*.in')
                            ->in(my @input_directories = ('.'));
# etc.

的问候, 的Matthias