2016-11-21 3 views
-3

ich eine Datei mit einer Reihe von zufälligen A des haben, G, C und Ts in ihnen, die wie folgt aussehen:Wie lese ich Strings in einen Hash in Perl

>Mary 
ACGTACGTACGTAC 
>Jane 
CCCGGCCCCTA 
>Arthur 
AAAAAAAAAAT 

ich diese Briefe nahm und verkettet sie am Ende mit ACGTACGTACGTACCCCGGCCCCTAAAAAAAAAAT. Ich habe nun eine Reihe von Positionen innerhalb dieser verketteten Sequenz, die für mich von Interesse sind, und ich möchte die zugehörigen Namen finden, die mit diesen Positionen (Koordinaten) übereinstimmen. Ich benutze die Länge der Perl-Funktion, um die Länge jeder Sequenz zu berechnen, und verknüpfe dann die Kultivierungslänge mit dem Namen in einem Hash. Bisher habe ich:

#! /usr/bin/perl -w 
use strict; 

my $seq_input = $ARGV[0]; 
my $coord_input = $ARGV[1]; 
my %idSeq; #Stores sequence and associated ID's. 

open (my $INPUT, "<$seq_input") or die "unable to open $seq_input"; 
open (my $COORD, "<$coord_input") or die "unable to open $fcoord_input"; 

while (<$INPUT>) { 
    if ($_ = /^[AGCT/) { 
    $idSeq{$_ 

my $id = (/^[>]/) 

#put information into a hash 
#loop through hash looking for coordinates that are lower than the culmulative length 

foreach $id 
$totallength = $totallength + length($seq) 
$lengthId{$totalLength} = $id 
foreach $position 
foreach $length 
    if ($length >= $position) { print; last } 

close $fasta_input; 
close $coord_input; 
print "Done!\n"; 

Bisher Probleme Ich habe die Datei in einem Hash zu lesen. Benötige ich auch ein Array, um den Hash zu drucken?

+7

Ich glaube, Sie einen großen Teil des Codes verloren, wenn es in der Frage einfügen. Bitte überarbeiten Sie es. Dies ist nicht einmal annähernd zu kompilieren. – simbabque

+0

@simbabque Angesichts der Geschichte des Fragestellers glaube ich nicht, dass wir weitere Informationen bekommen werden. Er akzeptierte nur eine von zwölf Antworten und reagierte nicht auf Kommentare. – PerlDuck

+0

@PerlDuck Ich weiß. Aber wir können nichts dagegen tun. Du warst damals wahrscheinlich nicht da, aber ich erinnere mich, dass es eine Zeit gab, in der die Frage nach akzeptierten Antworten irgendwo stand (vielleicht das Profil), und wir die Leute daran erinnerten, zuerst die Antworten zu akzeptieren, bevor sie neue Fragen stellten. – simbabque

Antwort

2

Nicht ganz klar, was Sie wollen; vielleicht dies:

my $seq; 
my %idSeq; 
while (my $line = <$INPUT>) { 
    if (my ($name) = $line =~ /^>(.*)/) { 
     $idSeq{$name} = length $seq || 0; 
    } 
    else { 
     chomp $line; 
     $seq .= $line; 
    } 
} 

, die produziert:

$seq = 'ACGTACGTACGTACCCCGGCCCCTAAAAAAAAAAAT'; 
%idSeq = (
     'Mary' => 0, 
     'Jane' => 14, 
     'Arthur' => 25, 
); 
Verwandte Themen