テキストを参照としたPerlによる名前の変更
よろしくお願いします。ディレクトリ内のファイル名をテキストデータを参照として変更したいと思っております。まず、以下の参照テキストがあります。
sansyo.txt
1,2,1
2,3,1
3,4,2
4,5,3
6,7,9
・
・
・
・
このファイルを利用してディレクトリ内のファイルを以下のようにリネームします。
1,2.txt → 1,2,1.txt
2,3.txt → 2,3,1.txt
3,4.txt → 3,4,2.txt
4,5.txt → 4,5,3.txt
6,7.txt → 6,7,9.txt
・
・
・
・
・
ここで私は以下のプログラムを作成しました。
sansyo.pl
------------------------------
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: $!";
open(FILE2,"sansyo.txt");
my @file = <FILE>;
my @file2 = <FILE2>;
close(FILE);
close(FILE2);
foreach my $line2 (@file2) {
my ($a,$b,$c) = split(/,/, $line2);
if ($dir == $a.",".$b.".txt"){
rename ($dir, $a.",".$b.",".$c.".txt");
}
}
}
closedir(DIR);
内容は、FILE2にsansyo.txtをforeachで1行ずつ読み込んでいき、
$a,$b.txtというファイルが$dirに読み込んだファイルにあったら、
$a,$b,$c.txtというファイルにリネームするという内容です。
ですが、いろいろ試行錯誤したもののうまくいきません。
具体的には、
Argument "1,2.txt" isn't numeric in numeric eq (==) at sansyo.pl line 23.
とエラーがでて
if ($dir == $a.",".$b.".txt"){
この部分でエラーが発生しているようです。
どなたか解決方法をよろしくお願いします。
お礼
返事がものすごく遅れてしまいすいませんでした! 単にリネームしようとしていました。言われたとおり、 既存ファイルの削除⇒リネームの手順で再度挑戦してみます。 ありがとうございました。