Thread Marker fürs Bearbeiten bestimmter Bereiche in Textdatei gesucht
(11 answers)
Opened by Pauline25 at 2011-08-10 14:06
So, nun kann ich das Thema abschließen. Es hat leider länger gedauert, da ich an verschiedenen Ansätzen gebastelt habe. Zunächst nochmal lieben Dank an murphy, dein Skript war super!! Nachdem du mir in der ersten Antwort verschiedene Lösungswege genannt hast, war mein Betreuer total begeistert von der Flip-Flop Idee, also sollte ich die auch noch mal ausprobieren. Ich poste mal den Lösungsweg, vielleicht kanns ja mal jemand gebrauchen:
Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 #!/usr/bin/perl # Task: Extract GeneID-Number and gene information use strict; use warnings; my $in; my $data; my @array; my $GeneID; my @BMB; my $flag = 0; my %hash; # 1) open the .gff Inputfile and while reading line by line split $data at each tab and put them in the @array open $in, '<', "Genomteil.gff" or die $!; while ($data = <$in>) { @array = split (/\t/, $data); if ($array[2] =~ /gene/) { #if you find the word 'gene' a textbloxk follows which contains some information I want to extract and put in an array) $flag = 1; # Set the flag, start of important data @BMB = ($array[3], $array[4], $array[6]); #the array will be used as values for my hash later } if ($array[8] =~ /.*;db_xref=GeneID:(\d+)\n/) { #if you find the word 'GeneID' extract the following number and put it in my hash (as key), then put the array in my hash $GeneID = $1; } if ($array[2] =~ /CDS/) { push (@BMB, $array[2]); #put more data in my array } elsif ($array[2] =~ /exon/) { push (@BMB, $array[2]); } $hash{$GeneID} = [ @BMB ]; if ($array [8]=~ /.*;exon_number=1/){ $flag = 0; } # Reset the flag. I am expecting a 'gene'-line next # end while ($data = <$in>) } close $in; foreach my $key (keys %hash) { foreach my $val (@{$hash{$key}}) { print "$key --> $val\n"; } } Ein schönes Wochenende an alle. Gruß |