将多个* txt文件读入子目录中的多个数组

时间:2018-02-02 06:45:08

标签: perl

我有多个World!,并且在每个subdirectories内我都有不同数量的txt个文件。我正尝试将每个txt文件从每个array读入subdirectory。请注意,每个subdirectory都有不同数量的txt个文件。我努力发现有人做了类似的事情。有没有人建议在哪里看,怎么做或类似的东西?

我已经找到了一些使用server command如何完成的示例,但我没有按照自己的意愿行事。我也有点困惑如何为每个array命名,尽管在不同的subdirectory数组中可以使用相同的名称,例如array1, array2, array3..

#!/usr/local/bin/perl

use strict;
use warnings;
use File::Glob;


my $txt;
my @fh;
my @table;
my $table;

for my $txt(glob'*.txt')
{
open my $fh,'<',$txt;
print "$txt\n";
for (my $txt =1 ;$txt <=8; $txt++)  
{ 
    open ($fh,"server$txt"); 
    while (<$fh>) 
    { 
        chomp; 
        my @values = split " ",$_; 
        push @{ "table$txt"},\@values;
        print "$table$txt\n";
    }
}
}

我可以使用此bash script在所有perl script上运行subdirectories

for i in `ls -d */`;do cd $i; pwd; for j in *txt; do perl ../foo.pl $j; done; cd ../ ; done

2 个答案:

答案 0 :(得分:0)

我没有测试过这个,我只在窗口中输入了代码。我的perl也生气了,并且直截了当地做事。

假设所有文本目录都在一个主目录下。使用opendir打开主目录。然后,您可以读取主目录中的所有条目并进行测试,以查看该条目是否是子目录(.txt文件所在的子目录)。

访问子目录,然后使用glob和regex测试.txt扩展名,它将返回一个数组,将数组推入主数组,创建一个数组数组。您可以查找如何迭代此结构以获取您的信息。

@all_subdirs;

$main_dir = "C:\main_dir";

my @files;
opendir (DIR,$main_dir) || die $!;
@files = readdir (DIR);
closedir (DIR) || die $!;

$i = 0;

foreach $subdir(@files){
  if(-d $sub_dir){    #-d tests for directory
    @tmp = glob "$main_dir\$subdir\*.txt";
    $all_dirs[$i] = [ @tmp ];
     $i++;
  }
}

这将subdir数组存储为数组引用。要获取数组,您需要取消引用它,如下所示:

$arrayref = $all_subdirs[0];
@an_array = @$array_ref;

答案 1 :(得分:0)

您不清楚是否希望将文件的名称读入数组,或者文件的内容

在前一种情况下,您可以从File::Find模块中受益,以收集特定目录及其子目录中的所有文件名;在后一种情况下,您应该使用File::FindFile::Slurp来阅读内容。