0

ディレクトリに保存されているファイル名の先頭部分と一致する必要がある文字列を Perl 変数に保存しています。

この変数を使用して、Perl の grep を使用して、ディレクトリからこのパターンに一致するファイルを見つけます。これが私がやっていることです:

    opendir (DIR, "data/testroot/") or die "$!";
    @file1 = <$f1/*.hdf>
    foreach(@file1){
       $patt = substr(basename($_),0,$ind);
       $file2 = grep {/${patt}*\.hdf/} readdir(DIR);
       #other code follows.......
    }
    closedir(DIR);

まず、フォルダー内のすべてのファイルのリストを取得し、f1それらを array に格納します@file。次に、 の各エントリについて@file1、最初の数文字を抽出して に保存し、 に保存されている開始パターンと一致する$patt別のフォルダーから同様のファイルを取得しようとします。data/testroot/$patt

そのgrep$file2 = grep {/${patt}*\.hdf/} readdir(DIR);は機能していません。

4

2 に答える 2

1

ファイル名がディレクトリ B のファイルの最初の文字と*.hdf一致するディレクトリ A のすべてのファイルを検索したいと思いますか?$ind

globいずれかまたはreaddir両方のディレクトリを使用する必要がありますが、両方を使用することはできません。この場合、正規表現でチェックすることなく A からglobすべてのファイルを選択できるため、これが最善の策のようです。*.hdf

以下のプログラムは、必要なことを行うようです。$f1とのサンプル値を置き換えまし$indた。

use strict;
use warnings;

use File::Basename;

my $f1 = 'data';
my $f1 = 'data/testroot';
my $ind = 6;

foreach (glob "$f1/*.hdf") {
  my $patt = substr(basename($_), 0, $ind);
  my @match = glob "$f2/$patt*.hdf";

  #other code follows.......
}
于 2012-04-11T14:16:51.720 に答える
0

${patt}*\.hdf「$patt が 0 回以上出現し、その後に .hdf が続く」ことを意味します。「$patt の後に任意のテキストが続き、その後に .hdf が続く」という意味ではないですか?

それはそうでしょう/${patt}.*\.hdf/

于 2012-04-11T13:44:57.247 に答える