0

質問は 2 倍です。

  1. 私はperl(perlの経験はありません)スクリプトを書いており、一度に1つのファイルをcsvからasciiに変換できます。フォルダー内のすべての csv を取り、それらを ascii/txt に変換するループを実行したいと考えています。

  2. これを試すのに最適な言語は perl ですか? 一度に1つのファイルを正常に実行できるので、はいと思いましたが、ループする方法を見つけるのに非常に苦労しました。

すべてのファイルを配列にロードして、それぞれに対してループを実行する方法を見つけようとしていましたが、グーグルが限界に達し、アイデアがありません。ここに私の作業スクリプトがあります:

#!/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 に答える