In Perl, wie kann ich Teile von Zeilen zu lesen, dass ein Kriterium entsprechen? [Duplikat]

StackOverflow https://stackoverflow.com/questions/1114522

  •  12-09-2019
  •  | 
  •  

Frage

    

Diese Frage bereits eine Antwort hier:

    
            
  •              Leseabschnitte aus einer Datei in Perl                                      4 Antworten                          
  •     
    

Beispieldaten:

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 : %

EDIT: In den oben genannten Daten. Die Spaltenbreite wird für die Abschnitte festgelegt, sondern es könnte einige Abschnitte sein Ich möchte nicht lesen. daß obige Probe zu reflektieren wurden Daten bearbeitet.

So in dieser Eingabedatei Ich mag Inhalt des ersten Abschnitts ‚1-ENST0000‘ in ein Array und Inhalt des ‚2-ENSBTAP0‘ in ein separates Array lesen und so weiter.

Ich habe Probleme mit einem regulären Ausdruck kommt, die das Muster definieren ... erste drei Zeilen haben <someNumber>-ENS<someotherstuf> und dann kann es auch node #<some number here> werden

War es hilfreich?

Lösung

OK, basierend auf Ihrem späteren Kommentar, das ist ein wenig anders als die vorherige Frage. Auch ich weiß jetzt, dass node #54 ein gültiger Eintrag in der ersten Spalte ist.

Update:. ich jetzt auch erkennen Sie die erste Spalte nicht brauchen

Update:. Im Allgemeinen sollten Sie weder wollen noch brauchen, um mit Zeichen-Arrays in Perl zu tun

Update: Nun, da Sie die geklärte, was sollte und nicht übersprungen werden soll, hier ist eine Version, die mit dem beschäftigt. Fügen Sie Muster in dem if Zustand zu schmecken.

#!/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 : %

Wie für das Lernen, wie man Fisch, empfehle ich Ihnen alles lesen Zusammenhang in Perldoc perltoc .

Andere Tipps

Ist das wirklich eine fester Spalt Datei? Wenn ja, dann nicht die Mühe nicht mit regulären Ausdrücken. Nur aufgeteilt an der Spaltenbreite, vielleicht aus Columen 1 Leerraum trimmen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top