0

问题是2折:

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

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

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

#!/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);
4

2 回答 2

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;
}
于 2012-10-24T21:41:51.547 回答
0

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

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

问候,马蒂亚斯

于 2012-10-24T21:47:34.247 回答