In Perl, wie kann ich Teile von Zeilen zu lesen, dass ein Kriterium entsprechen? [Duplikat]
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
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.