Проверка наличия файла на основе подстановочного знака в имени файла - PullRequest
0 голосов
/ 02 января 2019

У меня есть набор частичных имен файлов, которые мне нужно сравнить с последующими пакетами доставки данных. Например, некоторые записи в моем наборе "blue print":


FILE_ONE
FILE_TWO
FILE_THREE

Фактическая доставка будет содержать следующие файлы:

_ _ .
FILE_ONE_20180712104010_001.CSV
FILE_TWO_20180712112510_001.CSV
FILE_THREE_20180712112920_001.CSV

Теперь я бы хотел прочитать мой список в цикле и проверить, все ли файлы поступили. Я делаю проверку по имени + Я хотел бы объединить любые 14 цифр + Я хотел бы объединить порядковый номер, поступающий в качестве параметра + Я хотел бы объединить расширение.

Мой код выглядит так:

my $bp="blueprint.txt"; #list of partial file names I would like to look for

open my $handle, '<', $bp;
chomp(my @files = <$handle>);
close $handle;

foreach (@files) {
    if(! -f "$_" + "_/\d{14}/_" + $ARGV[0] + ".CSV")
    {
      print "$_ does not exist\n";
    }
}

Выдает следующие ошибки:

Quantifier follows nothing in regex; marked by <-- HERE in m/* <-- HERE

Пожалуйста, помогите мне с заявлением if.

1 Ответ

0 голосов
/ 03 января 2019

Вы также можете попробовать использовать readdir для сбора всех имен файлов в текущем каталоге.Например:

my $seq_num = $ARGV[0];
my $dir = '.';
my @matches;

opendir(my $dh, $dir) or die "Can't opendir $dir: $!";
while (my $name = readdir $dh) {
    for my $bp ( @files ) {
        if ( $name =~ /^\Q$bp\E_\d{14}_\Q$seq_num\E\.CSV/ ) {
            push @matches, $bp;
            last;
        }
    }
}
closedir $dh;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...