2017-02-27 4 views
0

の配列に倍数のファイルを追加します。私のようなラインの膨大なリストといくつかのtxtファイルが持っているperlの

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個の以上のファイルを持っている、と私はすべて読みたいとしましょう私はこのコードを使用しましたが、ファイルの1行だけを保存し、すべての行を保存するわけではありません!!

XP_001703830.1  
XP_001703836.1  
XP_001703844.1  
XP_001703820.1 
XP_001703815.1 
XP_001703834.1 
XP_001703810.1 
XP_001703805.1 
XP_001703844.1 

本当にありがとうございました!!!:私が欲しいもの

#!/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; 

のような、アレイ内のすべての行を格納しています

+0

最初に 'close IN;'はtxtファイルを開く 'for'ループの下になければなりません。 – AbhiNickz

+0

私は完全にあなたの正確なコードを使用して配列内のすべての行を格納することができます!あなたは '@ ID'で何を取得していますか? – AbhiNickz

+0

なぜあなたは 'cat'を再発明していますか? –

答えて

0

ラインターミネータに問題があると思います。とにかく、あなたがこれを行うことができ、メモリ(RAMのない通常最高使用)に全体のものを読んでいる場合

open IN, '<:crlf', $file 
3

をお試しください... perlのTIMTOWTDIを

my @ID; 
{ 
    local(@ARGV) = glob("*.txt"); 
    @ID=<>; 
} 
print "@ID\n"; 
+0

本当にありがとう、このコードは私に多くの助けを! –

1

はundefとして、デフォルトの入力の区切りを初期化することにより、

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; 
+0

ありがとう、私はそれを使用します! –

関連する問題