in reply to Vertical Regex

Here is a slightly different approach to zwon's where I only read the file in one place and use state variables to keep track of where we are in the data file.

use strict; use warnings; my $frgFile = q{spw768164.frg}; open my $frgFH, q{<}, $frgFile or die qq{open: < $frgFile: $!\n}; my $inFRG = 0; my $inSeq = 0; while( <$frgFH> ) { if( $inFRG ) { if( m|^\}| ) { $inFRG = 0; } elsif( $inSeq ) { if( m{^\.} ) { $inSeq = 0; } else { print; } } elsif( m{^acc:(\d+)} ) { print qq{>$1\n}; } elsif( m{^seq:} ) { $inSeq = 1; } else { ; } } else { next unless m|^\{FRG|; $inFRG = 1; } } close $frgFH or die qq{close: < $frgFile: $!\n};

The output.

>1101077781160 acaaggctggagtatttttttgtttagtaatttatttaattcagtttttatattttcataaactttttta ggatcaccagggccattacttaaaaaaaaaccatcaaaatttctattaattatatcctcagcattaaaat tgatctttagagagaaacttacctttgaaaatatattttttgttataaattaaatatccgttttgataat taagtttagttttattatctaatacgggcatattaaatcatgtgtattagtatattatatcaaaggaaat tcaaatgagtttggcaaaaaaatttctgatgacgttaaagtgctttaaaaggcggagatagaaaaacttt catagcaaggtatgtctattctgagttaaaaattttctattaaagaaatctagagagagacgtgcttaat tatctgacga >1101077781161 gcgtgacgtttgagcagaagaattatttattaatttctgaggattttaagtctttaaaacaaaacgtttc attcaaatttcaaaatcttgattataaagaagcgatggcactaatggctgagattggcaatattaatata caactggctcagcagtattaaaaattgaactagatgcgttggaatctcaagggttaggaagaacagtttc taatccaaattgtttaccctagacaatcaaactgccagtattaaac

I hope this is of interest.

Cheers,

JohnGG

Replies are listed 'Best First'.
Re^2: Vertical Regex
by joomanji (Acolyte) on Jun 04, 2009 at 16:32 UTC
    Thanks JohnGG for demonstrating another method for pattern matching. Will look into this code in detail so that I can apply the knowledge to the future scripts! Thanks !!