Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl 如何检查文件是否在目录中_Perl_File_Foreach_Directory_Exists - Fatal编程技术网

Perl 如何检查文件是否在目录中

Perl 如何检查文件是否在目录中,perl,file,foreach,directory,exists,Perl,File,Foreach,Directory,Exists,我有一个文本文件,其中包含单个助记符列表(1000+),还有一个目录,其中还包含页面文件。我想看看给定的助记符有多少页 下面是到目前为止我的代码 use strict; use warnings; use File::Find (); my $mnemonics = "path\\path\\mnemonics.txt"; my $pages = "path\\path\\pages\\"; open (INPUT_FILE, $names) or die "Cannot open file

我有一个文本文件,其中包含单个助记符列表(1000+),还有一个目录,其中还包含页面文件。我想看看给定的助记符有多少页

下面是到目前为止我的代码

use strict;
use warnings;
use File::Find ();

my $mnemonics = "path\\path\\mnemonics.txt";
my $pages = "path\\path\\pages\\";

open (INPUT_FILE, $names) or die "Cannot open file $mnemonics\n";
my @mnemonic_list = <INPUT_FILE>;
close (INPUT_FILE);

opendir (DH, $pages);
my @pages_dir = readdir DH;

foreach my $mnemonic (@mnemonic_list) {
    foreach my $page (@pages_dir) {
        if (-e $mnemonic) {
            print "$mnemonic is in the following page: $page";
        }  else {
            print "File does not exist \n";
        }
    }
}
那也没用


请帮忙

假设您要搜索一个充满文本文件的目录,并打印包含mnemonics.txt中单词的文件名,请尝试以下操作:

use strict; use warnings;

my $mnemonics = "path/mnemonics.txt";
my $pages = "path/pages/";

open (INPUT_FILE, $mnemonics) or die "Cannot open file $mnemonics\n";
chomp(my @mnemonic_list = <INPUT_FILE>);
close (INPUT_FILE);

local($/, *FILE);          # set "slurp" mode
for my $filename (<$pages*>) {
  next if -d "$filename";  # ignore subdirectories
  open FILE, "$filename";
  binmode(FILE);
  $filename =~ s/.+\///;   # remove path from filename for output
  my $contents = <FILE>;   # "slurp" file contents
  for my $mnemonic (@mnemonic_list) {
    if ($contents =~ /$mnemonic/i) {
      print "'$mnemonic' found in file $filename\n";
    }
  }
  close FILE;
}
使用严格;使用警告;
my$mnemonics=“path/mnemonics.txt”;
my$pages=“path/pages/”;
打开(输入文件,$mnemonics)或死亡“无法打开文件$mnemonics\n”;
chomp(my@memonic_list=);
关闭(输入_文件);
本地($/,*文件);#设置“slurp”模式
对于我的$filename(){
下一个if-d“$filename”#忽略子目录
打开文件“$filename”;
二进制模式(文件);
$filename=~s/+\//;#从文件名中删除路径以进行输出
我的$contents=;#“slurp”文件内容
对于我的$mnemonic(@mnemonic_list){
如果($contents=~/$mnemonic/i){
打印“$filename文件中的“$mnemonic”\n”;
}
}
关闭文件;
}

助记符中的条目是什么样子的?它们只是单词,在新行中输入。它大约有1000个单词+你想查看文件内部还是仅查看文件名?我想查看目录“pages”中的文件,并使用txt文件名查看它们是否在那里。。。这有意义吗?很抱歉这些应该是绝对路径吗?如果是这样,它们应该以双反斜杠开始。(事实上,即使在Windows上,您也可以将所有的双反斜杠更改为单正斜杠。)pages目录中没有文本文件。有些方法非常有效!除了一件事。。。如果它出现在多个页面中怎么办?它只输出助记符所在的第一页…它们是什么类型的文件?我认为这会起作用的原因是因为我可以在windows中启动搜索并键入我要查找的助记符,然后它会将其所在的页面吐出..一个.hdp文件是某种图像文件。所以它是一个二进制文件,应该以二进制模式读取(参见上面的修订代码)。不过,这可能还是行不通。可能文本字符串在文件中被编码为宽字符?我不知道该怎么处理。
use strict; use warnings;

my $mnemonics = "path/mnemonics.txt";
my $pages = "path/pages/";

open (INPUT_FILE, $mnemonics) or die "Cannot open file $mnemonics\n";
chomp(my @mnemonic_list = <INPUT_FILE>);
close (INPUT_FILE);

local($/, *FILE);          # set "slurp" mode
for my $filename (<$pages*>) {
  next if -d "$filename";  # ignore subdirectories
  open FILE, "$filename";
  binmode(FILE);
  $filename =~ s/.+\///;   # remove path from filename for output
  my $contents = <FILE>;   # "slurp" file contents
  for my $mnemonic (@mnemonic_list) {
    if ($contents =~ /$mnemonic/i) {
      print "'$mnemonic' found in file $filename\n";
    }
  }
  close FILE;
}