0

サンプルデータ:

603       Some garbage data not related to me, 55, 113 ->

1-ENST0000        This is sample data blh blah blah blahhhh
2-ENSBTAP0        This is also some other sample data
21-ENADT)$        DO NOT WANT TO READ THIS LINE. 
3-ENSGALP0        This is third sample data
node #4           This is 4th sample data
node #5           This is 5th sample data

This is also part of the input file but i dont wish to read this. 
Branch -> 05 13, 
      44, 1,1,4,1

17, 1150

637                   YYYYYY: 2 : %

編集:上記のデータで。セクションの列幅は固定されていますが、読みたくないセクションがいくつかあるかもしれません。上記のサンプル データは、それを反映するように編集されています。

したがって、この入力ファイルでは、最初のセクション '1-ENST0000' の内容を配列に読み込み、'2-ENSBTAP0' の内容を別の配列に読み込みます。

パターンを定義する正規表現を思いつくのに苦労しています...最初の3行が<someNumber>-ENS<someotherstuf>あり、その後もある可能性がありますnode #<some number here>

4

2 に答える 2

1

これは本当に固定列ファイルですか? もしそうなら、正規表現を気にしないでください。列幅で分割するだけで、おそらく列1から末尾の空白をトリミングします.

于 2009-07-11T20:21:25.247 に答える
0

OK、後のコメントに基づいて、これは前の質問とは少し異なります。また、node #54最初の列の有効なエントリであることがわかりました。

更新:最初の列は必要ないこともわかりました。

更新:一般に、Perl では文字配列を処理したくないし、処理する必要もありません。

更新:スキップすべきものとスキップすべきでないものを明確にしたので、これに対処するバージョンを次に示します。状態で好みのパターンを追加しifます。

#!/usr/bin/perl

use strict;
use warnings;

my @data;

while ( <DATA> ) {
    chomp;

    if ( /^[0-9]+-ENS.{5} +(.+)$/
            or /^node #[0-9]+ +(.+)$/
    ) {
        push @data, [ split //, $1 ];
    }
}

use Data::Dumper;
print Dumper \@data;

__DATA__
603       Some garbage data not related to me, 55, 113 ->

1-ENST0000        This is sample data blh blah blah blahhhh
2-ENSBTAP0        This is also some other sample data
21-ENADT)$        DO NOT WANT TO READ THIS LINE. 
3-ENSGALP0        This is third sample data
node #4           This is 4th sample data
node #5           This is 5th sample data

This is also part of the input file but i dont wish to read this. 
Branch -> 05 13, 
      44, 1,1,4,1

17, 1150

637                   YYYYYY: 2 : %

魚の釣り方については、 perldoc perltocにある関連するすべてを読むことをお勧めします。

于 2009-07-11T20:13:16.807 に答える