0

そのため、配列内のいくつかのファイルをループ処理し、下のディレクトリにある " )_Graph_S1.dat" ファイルの数だけ行に含まれる数を増やす必要があります。次に、ファイルの名前を置き換えた番号に変更する必要があるため、以下のディレクトリに 44 個のファイルがある場合にplate0013 (44)_Graph_S1.datなります。plate0013 (88)_Graph_S1.datたとえば、私は次のディレクトリで作業しています: plate0013\2nd run\. \2nd run\ディレクトリ内の「 )_Graph_S1.dat」ファイルの数に基づいて、ディレクトリ内のファイルの名前を変更する必要がありますplate0013

私はWindows 7とストロベリーパールを使用しています。

https://stackoverflow.com/a/5029064/2060081にあるコードを試しましたが、出力は変更されません。

以前のディレクトリにあるファイルの数を取得する方法がわからなかったので、44行き詰まりがなくなるまでフィラーを使用しました。私のコードの重要な部分は次のとおりです。

my @array = glob('*)_Graph_S1.dat');

foreach (@array) {
    my $in = $_;
    $in =~ s/(\d+)\)/$1+44/e;
    rename $_, %in;
}

私の問題は、新しい名前に括弧を含める必要があることです。これを行う方法がわかりません。

私はこれまで正規表現を使用したことがなく、1995 年以来 perl でプログラミングしたこともありません。お読みいただき、またご返信いただきありがとうございます。

@TLP のおかげで、システム コードが正しく出力されない理由がわかりました。しかし、正規表現に問題があることがわかりました。私のファイルの名前はplate 0013 (01)_Graph_S1.dat. ただし、新しい名前には括弧は含まれません。

4

1 に答える 1

0

@arrayからのファイルが含まれていると仮定すると2nd run

use strict;
use warnings;

my @array = glob('*)_Graph_S1.dat');

# forcing list context => perldoc -f glob
my $number_of_files_in_dir_below = @{[ glob('../*)_Graph_S1.dat') ]};

foreach (@array) {
    my $in = $_;
    $in =~ s/(\d+)\)/$1+$number_of_files_in_dir_below .")"/e;
    rename $_, $in;
}
于 2013-09-10T06:44:31.797 に答える