Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.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
Arrays 在perl中将多个文件添加到数组中_Arrays_List_Perl - Fatal编程技术网

Arrays 在perl中将多个文件添加到数组中

Arrays 在perl中将多个文件添加到数组中,arrays,list,perl,Arrays,List,Perl,我有一些txt文件,其中包含大量行,如: file_1.txt file_2.txt file_3.txt XP_001703830.1 XP_001703820.1 XP_001703810.1 XP_001703836.1 XP_001703815.1 XP_001703805.1 XP_001703844.1 XP_001703834.1 XP_001703844.1 假设我在一个文件夹中有10个或更多文件,我想读取所有文件并将内容存储在一

我有一些txt文件,其中包含大量行,如:

file_1.txt        file_2.txt      file_3.txt
XP_001703830.1    XP_001703820.1  XP_001703810.1
XP_001703836.1    XP_001703815.1  XP_001703805.1
XP_001703844.1    XP_001703834.1  XP_001703844.1
假设我在一个文件夹中有10个或更多文件,我想读取所有文件并将内容存储在一个数组中,我使用了此代码,但它只存储文件的一行,而不是所有行

#!/usr/bin/perl -w
use strict;

my @files = glob("*.txt");
my @ID;

for my $file(@files) {
    open IN, '<', $file or die "$!";
        while (<IN>) {
            my $fields = $_;
            push @ID, $fields;
        }
}

foreach (@ID){
    print "$_\n";
}
close IN;
exit;

非常感谢

我猜您在线路终止符方面有问题。试一试

open IN, '<:crlf', $file

在中打开,”我想您的行终止符有问题。试一试

open IN, '<:crlf', $file

在“中打开,如果您正在将所有内容读入内存(通常不是RAM的最佳使用),那么您可以这样做。。。perl TIMTOWTDI

my @ID;
{
    local(@ARGV) =  glob("*.txt");
    @ID=<>;
}
print "@ID\n";
my@ID;
{
本地(@ARGV)=全局(“*.txt”);
@ID=;
}
打印“@ID\n”;

如果您正在将所有内容读入内存(通常不是RAM的最佳使用),那么您可以这样做。。。perl TIMTOWTDI

my @ID;
{
    local(@ARGV) =  glob("*.txt");
    @ID=<>;
}
print "@ID\n";
my@ID;
{
本地(@ARGV)=全局(“*.txt”);
@ID=;
}
打印“@ID\n”;

通过将默认输入分隔符初始化为未定义,可以解决此问题

use strict;
my @files = glob("*.txt");
my @ID;

for my $file(@files) {
    open IN, '<', $file or die "$!";
    while (<IN>) {
        my $fields = do{local $/; <IN>};
        push @ID, $fields;
    }
}

foreach (@ID){
    print "$_\n";
}
close IN;
exit;
使用严格;
my@files=glob(“*.txt”);
我的@ID;
对于我的$file(@files){

在“中打开,将默认输入分隔符初始化为未定义,可以解决此问题

use strict;
my @files = glob("*.txt");
my @ID;

for my $file(@files) {
    open IN, '<', $file or die "$!";
    while (<IN>) {
        my $fields = do{local $/; <IN>};
        push @ID, $fields;
    }
}

foreach (@ID){
    print "$_\n";
}
close IN;
exit;
使用严格;
my@files=glob(“*.txt”);
我的@ID;
对于我的$file(@files){

在打开txt文件的循环中,“第一个
close-IN;
应该在
下。我完全能够使用您的精确代码将所有行存储在一个数组中!!您在
@ID
中得到了什么?您为什么要重新发明
cat
?第一个
close-IN;
应该在
下,在
循环中,您可以打开一个txt文件。我完全能够用你的精确代码将所有行存储在一个数组中!!你从
@ID
中得到了什么?你为什么要重新发明
cat