Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]7699[/thread]

reg. expr wird nicht aufgerufen



<< >> 9 Einträge, 1 Seite
paidopoieo
 2006-02-10 22:36
#62845 #62845
User since
2005-12-02
96 Artikel
BenutzerIn
[default_avatar]
Hi
folgendes Codefragment:

Code: (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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
#!/usr/bin/perl -w

use Bio::SearchIO;
use strict;

print "start program\n";
my $directory = '/home/Hubert/result_1';
opendir(DIR, $directory) || die("Cannot open directory");
print "opened directory\n";

foreach my $file (readdir(DIR)) {
if ($file =~ /txt/) {
print "read file $file \n";

$file = $directory . '/' . $file;

my $search = new Bio::SearchIO (-format => 'blast',

-file => $file);



my $cutoff_len = 10;



#iterate over each query sequence
print "try to enter while loop\n";
while (my $result = $search->next_result) {
print "entered 1st while loop\n";

#iterate over each hit on the query sequence
while (my $hit = $result->next_hit) {
print "entered 2nd while loop\n";

#iterate over each HSP in the hit
while (my $hsp = $hit->next_hsp) {
print "entered 3rd while loop\n";

if ($hsp->length('sbjct') <= $cutoff_len) {
#print $hsp->hit_string, "\n";


for ($hsp->hit_string) { #$hsp->hit_string
print $hsp->hit_string,"\n";

if (tr/K// >= 2 || tr/R// >= 2 && tr/W// >= 2 ||
tr/K// == 1 && tr/R// == 1 && tr/W// >= 2) {



print "create and open to write file\n";
open (bigShot, ">>result_adv_4.txt") || die ("Could not open file. $!");
#print $result->query_name, "\t";

# print $hit->significance, "\t";
print bigShot $hit->name, "-->";
print bigShot $hit->description, "\n";
#print bigShot "Query: ", $hsp->start('query'), " ", $hsp->query_string, " ", $hsp->end('query'), "\n";
print bigShot "Seq: ", $hsp->start('hit'), " ", $hsp->hit_string, " ", $hsp->end('hit'), "\n";

# print $hsp->rank, "\t";
# print $hsp->percent_identity, "\t";
# print $hsp->evalue, "\t";
# print $hsp->hsp_length, "\n";


close (bigShot);


}#end if condition
}#end for loop
}#end if condition
}#end 3rd while loop
}#end 2nd while loop
}#end 1st while loop
}#end if condition
}#end foreach loop

closedir(DIR);


der folgende regular expression ausdruck wird beim parsen der files nicht aufgerufen:

if (tr/K// >= 2 || tr/R// >= 2 && tr/W// >= 2 ||
tr/K// == 1 && tr/R// == 1 && tr/W// >= 2) {

fuer jede erdenkliche hilfe dankbar\n\n

<!--EDIT|paidopoieo|1139609595-->
vayu
 2006-02-10 23:49
#62846 #62846
User since
2005-01-13
782 Artikel
BenutzerIn
[default_avatar]
ganz einfach, weil das kein match ist, sondern eine translation.

was meint du ersetzt jeweils den Buchstaben K durch nichts. oder den Buchstaben R durch nichts UND den Buchstaben W durch nichts :)

wenn du matchen willst mach

m//


ich scheine übrigens blind zu sein ^^ wo in dem codestück oben drüber taucht denn der tr-ausdruck auf?
paidopoieo
 2006-02-11 00:14
#62847 #62847
User since
2005-12-02
96 Artikel
BenutzerIn
[default_avatar]
ok, hast recht, muss das unabsichtlich auskopiert haben.....
hab den beitrag geaendert...

mfg
paidopoieo
 2006-02-11 00:32
#62848 #62848
User since
2005-12-02
96 Artikel
BenutzerIn
[default_avatar]
hi,
es hat schon mal funktioniert...., doch anscheinend geht das, denn ich zaehle die chars in einem string....und das geht mit tr...

doch aus irgendeinem unerfindlichem grund geht es nicht mehr...
hab aber nicht geaendert

lg
vayu
 2006-02-11 02:51
#62849 #62849
User since
2005-01-13
782 Artikel
BenutzerIn
[default_avatar]
also das sowas geht wusste ich bisher nicht ;) aber in Perl ist ja alles möglich.

das tr gibt also zurück, wieviel characters es ersetzt hat. interessant :D
renee
 2006-02-11 03:16
#62850 #62850
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
mach mal:
Code: (dl )
1
2
              if (tr/K/K/ >= 2 || tr/R/R/ >= 2 && tr/W/W/ >= 2 ||
tr/K/K/ == 1 && tr/R/R/ == 1 && tr/W/W/ >= 2) {
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
paidopoieo
 2006-02-13 19:24
#62851 #62851
User since
2005-12-02
96 Artikel
BenutzerIn
[default_avatar]
Hallo renee,
nein, leider geht nicht, es hat aber schon funktioniert, und ich weiss jetzt nicht wiesos nicht mehr geht....

hab jetzt auch folgendes probiert:

Code: (dl )
1
2
if ($hsp->hit_string =~ tr/K// >= 2 || $hsp->hit_string =~ tr/R// >= 2 && $hsp->hit_string =~ tr/W// >= 2 ||
$hsp->hit_string =~ tr/K// == 1 && $hsp->hit_string =~ tr/R// == 1 && $hsp->hit_string =~ tr/W// >= 2) {


bekomm aber leider dasselbe resultat

mfg
Hubert
Dubu
 2006-02-13 21:54
#62852 #62852
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
Wenn du nichts geändert hast, dann liegt es doch wahrscheinlich an deinen Eingabedaten, oder?
Wie sehen die denn aus? Beispiel? Der Code wirkt so weit okay.
paidopoieo
 2006-02-14 04:57
#62853 #62853
User since
2005-12-02
96 Artikel
BenutzerIn
[default_avatar]
hat sich erledigt, funktioniert wieder...
joop, ist an den eingangsdaten gelegen....
<< >> 9 Einträge, 1 Seite



View all threads created 2006-02-10 22:36.