2013-06-26 50 views
0

假設我有5個文件:tmp1.txt,tmp2.txt,tmp3.txt,temp1.txt,temp2.txt在perl中使用wild字符讀取多個文件

現在有什麼方法可以打開多個文件並使用wilcards從它們中讀取。

實施例,

  1. 如果我寫"t*.txt"然後從每個文件中的數據應被讀出。
  2. 如果我寫"tm*.txt"那麼只能讀取3個文件中的數據。
+0

您是否試過檢查perldocs?試過谷歌? – tuxuday

回答

0

是的,您可以使用glob,假設這些文件存在於本地目錄中,並且該目錄中沒有其他具有相似名稱的文件。

print "Read which files? "; 
chomp(my $glob = <STDIN>); 
my @files_to_read = glob $glob; 

當然,你能保證你不會看到任何其他文件通過過濾他們

my %valid = map { $_ => 1 } qw(tmp1 tmp2 tmp3 temp1 temp2); 
@files = grep $valid{$_}, glob $glob; 

第一條語句創建一個散列結果,其中的有效文件名鍵有一個真正的價值,其他的語句運行這檢查glob列表的元素。

+0

所以在得到文件的散列之後,如何從中讀取數據。我的意思是,如何將文件處理程序分配給這些文件? 1個文件會有一個處理程序嗎?對不起,我沒有得到它。 – bookishq

+0

你問在Perl中如何打開一個文件? – TLP

+0

http://perldoc.perl.org/functions/open.html – TLP

0

您可以使用glob來查找文件列表,並通過將列表分配給@ARGV來模擬它們在命令行上傳遞,從而順序讀取它們。

our @ARGV = glob '/path/to/tm*.txt'; 

while (<ARGV>) { 
    print; 
} 
+0

如果($^O eq'MSWin32'){@ARGV = map glob,@ARGV}';-) – TLP

+0

@TLP:是的,如果文件名模式作爲命令行參數傳遞。 – Borodin