ディレクトリ内のテキストファイルに対する同一処理
よろしくお願いします。現在Linuxの環境でテキスト処理をしております。
ディレクトリ内にファイル名の異なった以下のような大量ファイルがあります。
a.txt
0,1,2,3,4,5,6,7
1,2,3,4,5,6,7,8
b.txt
2,3,4,5,6,7,8,9
3,4,5,6,7,8,9,10
これらのファイルをカンマでsplitし、左から2番目の数にだけ1を引き,下のディレクトリであるoutに出力させます。出力は以下のようになります。
./out/a.txt
0,0,2,3,4,5,6,7
1,2,3,4,5,6,7,8
./out/b.txt
2,2,4,5,6,7,8,9
3,4,5,6,7,8,9,10
そこで以下のようなPerlのプログラムを作成しました。
use strict;
use warnings;
my $dirname = '.';
opendir(DIR, $dirname) or die "$dirname: $!";
while (my $dir = readdir(DIR)) {
next unless (-f $dir);
next unless ($dir =~ /\.txt$/);
print $dir, "\n";
open(FILE, $dir) or die "$dir: $!";
my @file = <FILE>;
foreach $line (@file) {
my ($a,$b,$c,$d,$e,$f,$g,$h) = split(/,/, $line);
my $b = $b - 1;
close(FILE);
}
open(NEWFILE, "> ./out/$dir") or die "$dir: $!";
print NEWFILE @file;
close(NEWFILE);
}
closedir(DIR);
ですが、出力は完了するのですが、元のファイルから計算がされていません。どこがどう間違えているのかご指摘よろしくお願い申し上げます。
お礼
あう、定数だった ありがとうございます