Perl Zeichen zählen

Seiler

Aktives Mitglied
Thread Starter
Dabei seit
05.04.2005
Beiträge
244
Reaktionspunkte
2
Hallo Ihr abgefahrenen Perl Cracks...
Hätte mal wieder eine kleine Frage:

Also ich habe einen Text, in dem ich gerne Zeichen zählen möchte. Mit tr/// funktioniert es auch super ($count_T += $_=~ tr/[Tt]//), aber nur wenn ich nach einem einzelnen Zeichen, z.B. "T" zähle.
Wie bekomme ich es hin, dass alle TT gezählt werden (z.B. hier TTAATA, also 1 oder hier TTTAATA 2x TT. Mit einfachem Klammern funktioniert es nicht ( $count_AA += $_=~ tr/(TT)//). Sollte aber möglichst einfach sein !

Danke für Eure Hilfe

Michael
 
Zuletzt bearbeitet:
geneigte Leser,

aehm, z.B.:

Code:
length("oh, all diese Zeichen");

cheers,

pseudogc

n.b.: "perldoc -f length"
 
Ja, aber das gibt mir die Länge eines Strings, nicht aber die Anzahl einer bestimmten Ausdrucks im String...Wie ich schrieb möchte ich überlappend die Anzahl von "TT" aus TTATTTAAAA, sprich 3x TT !

Grüße Michael
 
ich würde den string in schritten von je zwei buchstaben durchgehen, z.b. mit ner for schleife und dann abfragen

if(substr($_, $i, 2) eq "TT") -> $count++ (mit $i als zähler der schleife)

sollte funktionieren (selber schon so gemacht). dein beispiel sieht mir sehr nach ner DNA sequenz aus... ;)
 
Jepp, handelt sich um DNA. Dachte es gibt eine einfachere Lösung, als mit einer for Schleife zu arbeiten....

Grüße
Michael
 
Wie bekomme ich es hin, dass alle TT gezählt werden (z.B. hier TTAATA, also 1 oder hier TTTAATA 2x TT. Mit einfachem Klammern funktioniert es nicht ( $count_AA += $_=~ tr/(TT)//). Sollte aber möglichst einfach sein !

du hast glaub ich einen kleinen denkfehler bei tr und dem "TTTAATA 2x TT"...
das wird das erste TT erfassen und dann nur noch TAATA überbleiben...
 
Wie ich schrieb möchte ich überlappend die Anzahl von "TT" aus TTATTTAAAA, sprich 3x TT !

Sorry, schon zu lange im Labor. Als Starter:

Code:
$count = $string =~ tr/T/T/;

oder

Code:
my $count = ($string =~ s/(TT)/$1/g);

oder

Code:
$text = 'ATTAATTA';
$count = () = $text =~ /TT/g;

cheers,

pseudogc

n.b.: Du kennst BioPerl?

EDIT: obiges macht dann doch nicht genau was DU willst *ich habe das auch zo wie one0eight verstanden, aber Du hast es ja schon klar geschrieben* - nach knapp 40 Stunden Labor sollte man keine Postings mehr schreiben. Ich denke noch mal drueber nach, Nacht alle miteinander! ;)
 
Zuletzt bearbeitet:
Ja,
ich kenne BioPerl und ich werde jetzt die Lösung mit der for Schleife benutzen, da es so super funktioniert.
Ich muss nur zwei Dateien durchsuchen. Daher wollte ich es so einfach wie möglich gestalten...

Aber allen Danke für die schnelle Hilfe!

Grüße Michael
 
Zurück
Oben Unten