问题是2折:
我正在写一个perl(不是perl经验)脚本,可以让它一次将一个文件从csv转换为ascii。我想做一个循环,将所有csv放在一个文件夹中,并将它们转换为ascii / txt。
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);
答案 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