Ich habe Probleme bei der Implementierung von zwei Dateien in diesem Programm. Ich versuche, auf den Inhalt der Datei $Q
und zuzugreifen.Suche längste Übereinstimmung zwischen 2 Dateien von Muster
print "Input the K value \n";
$k = <>;
chomp $k;
print "Input T\n";
$t = <>;
chomp $t;
%Qkmer =();
$i = 1;
$query=' ';
while ($line=<IN>) {
chomp($line);
if ($line=~ m/^>/) {
next;
}
$query=$query.$line;
$line=~ s/(^|\n)[\n\s]*/$1/g;
while (length($line) >= $k) {
$line =~ m/(.{$k})/;
if (! defined $Qkmer{$1}) {#every key not deined as the first match
$Qkmer{$1} = $i;
}
$i++;
$line = substr($line, 1, length($line) -1);
}
}
open(MYDATA, '<', "data.txt");
while ($line=<MYDATA>) { \
chomp($line);
%Skmer =(); # This initializes the hash called Skmer.
$j = 1;
if ($line=~ m/^>/) { #if the line starts with >
next; #start on next line #separated characters
}
$line=~ s/^\s+|\s+$//g ; #remove all spaces from file
while (length($line) >= $k) {
$line =~ m/(.{$k})/;#match any k characters and only k characters in dna
$Skmer{$1} = $j; #set the key position to $j and increase for each new key
$j++;
$line = substr($line, 1, length($line) -1); #this removes the first character in the current string
}
###(56)###for($Skmerkey(keys %Skmer)){
$i=$Skmer{$Skmerkey};
if(defined $Qkmer($Skmerkey)){
$j=$Qkmer($Skmerkey);
}
$S1=$line;
$S2=$query;
@arrayS1= split(//, $S1);
@array2= split(//, $S2);
$l=0;
while($arrayS1[$i-$l] eq $arrayS2[$j-$l]){
$l++;
}
$start=$i-$l;
$m=0;
while ($arrayS1[$i+$k+$m] eq $arrayS2[$j+$k+$m]) {
$m++;
}
$length=$l+$k+$m;
$match= substr($S1, $start, $length);
if($length>$t){
$longest=length($match);
print "Longest: $match of length $longest \n";
}
}
}###(83)###
Die Eingabedateien enthalten nur Buchstabenfolgen. Zum Beispiel:
Datei 1:
ahhtsagnchjgstffhjyfcsghnvzfhg
File2:
ggujvfbgfgkjfcijjjffcvvafcsghnvzfhgvugxckugcbhfcgh
ghnvzfhgvugxckHhfgjgcfujvftjbvdtkhvddgjcdgjxdjkfrh
ajdbvciyqdanvkjghnvzfhgvugxc
Von einer Übereinstimmung eines Wortes der Länge $k
in Datei 1 in Datei 2, überprüfe ich aus, dass Match in Datei 2 nach links und rechts von Wort für weitere Übereinstimmungen. Die endgültige Ausgabe ist die längste Übereinstimmung zwischen Datei 1 und Datei 2 basierend auf $k
. Jetzt habe ich ge
Mit diesem Code, erhalte ich einen Syntaxfehler und ich bin nicht suer warum, weil es mir richtig aussieht:
syntax error at testk.pl line 56, near "$Skmerkey("
syntax error at testk.pl line 83, near "}"
Danke.
'$ k' verwendet, aber nicht definiert. 'Warinings verwenden; Verwenden Sie strikt; ' – Mike
Hash'% kmer' immer leer !!! – Mike
Ja, ich habe den Code direkt von meinem Editor eingefügt, also musste ich manuell Leerzeichen hinzufügen, um alles in einen Codeblock zu bekommen. In meinem aktuellen Programm sind die auskommentierten Bereiche nicht auskommentiert. Ich habe die Hashes verwendet, um Bereiche zu unterscheiden, mit denen ich speziell Probleme habe und wahrscheinlich einen anderen Weg implementieren muss. –